2

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

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

这是错误:

函数调用:在左括号后需要一个函数,但找到了一个变量

4

2 回答 2

5

如果您正在使用 DrRacket,您可能正在“初学者学生语言”模式下运行 DrRacket。在介绍性 CS 级别,该特定语言级别模式禁用高阶功能。 另一方面, SICP假定允许高阶过程的语言级别。

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

请参阅选择一种语言:将 DrRacket 切换到“使用源中声明的语言”,并在程序的第一行设置:

#lang racket

那应该让你编写你的函数。


顺便说一下DrRacket对 SICP 的专门支持;如果你要通过 SICP,你可能想要使用它。您可以通过将顶部的#lang行更改为:

#lang planet neil/sicp

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

于 2012-10-08T17:59:06.963 回答
2

我相信你调用程序的方式有问题。例如,这适用于上面的代码:

(sum values 1 add1 10)
> 55
于 2012-10-08T17:24:25.013 回答