我是一名新的 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
所以我认为这解决了问题,但我仍然不完全理解“。”的使用。在这种情况下操作员。我认为我们已经解决了这个问题,但任何更多的见解将不胜感激!