PLT Scheme / Racket中双点符号的行为是什么?

时间:2014-10-25 06:14:47

标签: racket

我最近正在使用方案本身实现一个方案解释器。我知道单点表示法意味着构造一对或定义一个具有多个参数的lambda。但后来我发现了

'(3 . 4 . 5)

评估为

'(4 3 5)

(define (a . b . c) (displayln b) (displayln c))
(a 4 3)

它会打印(很奇怪#\ newline没有打印)

(4 3)>

有人可以解释双点表示法的含义吗?

1 个答案:

答案 0 :(得分:0)

来自http://docs.racket-lang.org/reference/reader.html

  

如果读者之间发现三个或更多数据   匹配括号,如果是一对分隔的.s   包围除第一个和最后一个元素以外的任何元素,   结果是一个包含所包围元素的列表   由.s作为第一个元素,其次是其他元素   阅读顺序。这个约定支持一种   读者级别的中缀符号。

Racket为中缀函数调用提供双点语法:

(2 . + . 3) => 5