我在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 ()))
。我在这里做错了什么?
答案 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
表单。