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)
这是错误:
函数调用:期望一个函数在打开括号后,但找到一个变量
如果您使用的是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)
第一次运行程序时需要一点时间,因为它会自动安装支持软件; 随后使用的包应该很快.