SICP中的一个例子

Jer*_*hao 2 lisp scheme sicp racket

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

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))
Run Code Online (Sandbox Code Playgroud)

这是错误:

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

dyo*_*yoo 5

如果您使用的是DrRacket,则可能是在"初学者学生语言"模式下运行DrRacket.在介绍性CS级别,该特定语言级别模式禁用高阶函数. 另一方面,SICP假定语言级别允许更高阶的程序.

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

请参阅选择语言:将DrRacket切换为"使用源中声明的语言",并创建程序的第一行:

#lang racket
Run Code Online (Sandbox Code Playgroud)

那应该让你写你的功能.


顺便提一下,DrRacket 为SICP提供专业支持 ; 如果您打算通过SICP,您可能想要使用它.您可以通过将顶部的#lang行更改为:来启用此支持:

#lang planet neil/sicp
Run Code Online (Sandbox Code Playgroud)

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