首页 文章

方案:三个虚线元素的列表奇怪地返回(像中缀运算符?)

提问于
浏览
6

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

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

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

这毫无意义 . Afaik,翻译应该创建一个带有'a和cdr'b'的cons单元格,'c应该是无效的 . 也就是说,翻译在这里做了一些非常奇怪的事情 . 这适用于#lang方案,#lang racket等 . 我们使用DrRacket作为翻译 .

有趣的是,

>'(a . b . c . d)

抛出异常并死亡 .

我非常好奇,很想能够理解这一点,因为我不熟悉这门语言 . 谷歌非常无益(可能因为搜索条件有点含糊不清)谢谢!

编辑:可能是因为 '(a . b . c) 被解释为b作为中缀运算符 . 例如: >(4 . + . 6) 返回10.也许解释器使用b像运算符?即 (b a c) ,如 (+ 4 6) ,infix-wise .

实验说:

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

所以我认为这解决了这个问题,但我仍然不完全理解“ . ”的使用 . 在这种情况下运算符 . 我想我们已经解决了这个问题,但我们将非常感谢您的见解!

2 回答

  • 4

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

  • 8

    这是Racket读者的一个特色 . (见约翰的回答 . )

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

相关问题