【问题标题】:One example in SICPSICP中的一个例子
【发布时间】:2012-09-28 23:08:32
【问题描述】:

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

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

这是错误:

函数调用:希望在左括号后有一个函数,但找到了一个变量

【问题讨论】:

  • 当您尝试定义函数或尝试运行它时,您会收到该错误吗?如果是在您尝试运行它时,请显示您正在输入的内容。
  • 这几乎可以肯定是因为 DrRacket 处于初学者学生语言 (BSL) 模式:它将上面的代码视为编译时语法错误,因为它假定学生不应该使用高阶函数.

标签: lisp scheme racket sicp


【解决方案1】:

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

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

参见Choosing a Language:将 DrRacket 切换到“使用源中声明的语言”,并在程序的最上面一行:

#lang racket

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


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

来启用此支持
#lang planet neil/sicp

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

【讨论】:

【解决方案2】:

我认为您调用该程序的方式存在问题。例如,这适用于上面的代码:

(sum values 1 add1 10)
> 55

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 2021-08-30
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2012-02-14
    相关资源
    最近更新 更多