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