Racket(Scheme)错误:预期引用后的符号名称,但找到了一个部分

时间:2014-09-02 08:26:14

标签: scheme racket the-little-schemer

我在Drracket Version 5.3.6中运行此代码(The Little Schemer):

(define rember
(lambda (a lat)
(cond
  ((null? lat) (quote ()))
  (else 
   (cond
     ((eq? (car lat) a) (cdr lat))
     (else (cons (car lat) (rember a (cdr lat)))))))))

它会在quote: expected the name of the symbol after the quote, but found a part部分中引发错误: (quote ())) 。我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

错误表示您选择在" Beginning Student"中运行该程序。语言。在这种语言中,quote形式受到限制。

如果您将语言更改为"使用列表缩写开始学生"一切顺利。

让我们在"初学者"的文档中查找quote。语言:

The form quote in Beginning Student

您将看到语法被描述为(syntax name)。 如果将其与“#34; Beginning Student with List Abbreviations"”的文档进行比较。 quote现在允许引用列表。

开始学生语言受限制的原因是,在HtDP的开头仅使用了(quote name)形式,因此如果跟随HtDP的学生写'(foo bar),那么这不是故意的。因此,错误(声明名称是预期的)很有用 - 因此需要限制quote表单。