Lisp SICP中的一个例子

Lisp SICP中的一个例子,lisp,scheme,racket,sicp,Lisp,Scheme,Racket,Sicp,这是SICP中的一个示例,我输入了它,但它有一个错误 (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) 这就是错误: 函数调用:应为开括号后的函数,但找到了变量 我相信你调用过程的方式有问题。例如,使用上述代码可以很好地工作: (sum values 1 add1 10) > 55 如果您正在使用DrRacket,您可

这是SICP中的一个示例,我输入了它,但它有一个错误

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))
这就是错误:

函数调用:应为开括号后的函数,但找到了变量


我相信你调用过程的方式有问题。例如,使用上述代码可以很好地工作:

(sum values 1 add1 10)
> 55

如果您正在使用DrRacket,您可能正在“初学者语言”模式下运行DrRacket。在入门级CS中,特定语言级模式禁用高阶函数,另一方面,假定语言级别允许高阶过程

假设是这种情况,您可以通过调整DrRacket来修复此问题,使其使用允许高阶过程的语言级别,例如

请参阅:将DrRacket切换到“使用源代码中声明的语言”,并在程序的顶行:

#lang racket
这样就可以编写函数了


顺便说一句,这里有一个叫DrRacket的地方;如果你要通过SICP,你可能想用这个。您可以通过将顶部的#lang行更改为:


第一次用它运行程序需要一点时间,因为它会自动安装支持软件;该包的后续使用应该很快。

当您尝试定义函数或尝试运行函数时,是否会出现该错误?如果是在您尝试运行它时,请显示您正在键入的内容。这几乎可以肯定,因为DrRacket处于初学者学生语言(BSL)模式:它将上述代码视为编译时语法错误,因为它假设学生还不应该使用高阶函数。DrRacket中SICP支持的当前链接:
#lang planet neil/sicp