这是 SICP 中的一个示例,我输入它但它有一个错误。
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
这是错误:
函数调用:在左括号后需要一个函数,但找到了一个变量
如果您正在使用 DrRacket,您可能正在“初学者学生语言”模式下运行 DrRacket。在介绍性 CS 级别,该特定语言级别模式禁用高阶功能。 另一方面, SICP假定允许高阶过程的语言级别。
假设是这种情况,您可以通过调整 DrRacket 来解决此问题,使其使用允许高阶程序的语言级别,例如#lang racket。
请参阅选择一种语言:将 DrRacket 切换到“使用源中声明的语言”,并在程序的第一行设置:
#lang racket
那应该让你编写你的函数。
顺便说一下DrRacket对 SICP 的专门支持;如果你要通过 SICP,你可能想要使用它。您可以通过将顶部的#lang行更改为:
#lang planet neil/sicp
第一次使用它运行程序需要一点时间,因为它会自动安装支持软件;包的后续使用应该很快。
我相信你调用程序的方式有问题。例如,这适用于上面的代码:
(sum values 1 add1 10)
> 55