6

我是一名新的 Scheme/Racket 学生,所以请原谅任何明显的语法错误。

今天在课堂上提出方案列表'(a, b, c)应该是无效的,但是当我们运行它时,它返回:

>'(a . b . c)  
(b a c)

这没有任何意义。Afaik,解释器应该创建一个带有 car 'a 和 cdr 'b 的 cons 单元格,并且 'c 应该是无效的。也就是说,解释器在这里做了一些非常奇怪的事情。这适用于#lang 方案、#lang 球拍等。我们使用 DrRacket 作为解释器。

有趣的是,

>'(a . b . c . d)

抛出异常并死亡。

我很好奇,并且很想能够理解这一点,因为我是这门语言的新手。谷歌非常没有帮助(可能是因为搜索词有点模棱两可)谢谢!

编辑:这可能是因为'(a . b . c)用 b 解释为中缀运算符。例如:>(4 . + . 6)返回 10。也许解释器像运算符一样使用 b?即(b a c)喜欢(+ 4 6),中缀方式。

实验 说:

>(define b +)  
>(define a 4)  
>(define c 6)  
>(a . b . c)  
10

所以我认为这解决了问题,但我仍然不完全理解“。”的使用。在这种情况下操作员。我认为我们已经解决了这个问题,但任何更多的见解将不胜感激!

4

2 回答 2

8

简短的回答:你明白了。有关此 Racket 特定使用点的更多信息,请参阅 Racket 文档中的中 文档。

于 2011-09-16T20:32:04.987 回答
4

这是 Racket 阅读器的一个特殊功能。(见约翰的回答。)

对于其他实现,您可以改为使用可读的 S 表达式阅读器来读取中缀表达式。它使用花括号。例如,{3 + 4}读入为(+ 3 4). 更特别(比 Racket 的中缀阅读器),您可以使用{3 + 4 + 5}or {3 + 4 + 5 + 6}; 它们将分别读作(+ 3 4 5)(+ 3 4 5 6)

于 2011-09-16T20:42:10.130 回答