SICP中的一个例子

时间:2012-10-08 17:00:03

标签: lisp scheme racket sicp

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

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

这是错误:

  

函数调用:期望一个函数在打开括号后,但找到一个变量

2 个答案:

答案 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