Racket 什么';PLT方案/球拍中的双点表示法的行为是什么?

Racket 什么';PLT方案/球拍中的双点表示法的行为是什么?,racket,Racket,我最近使用scheme本身实现了一个scheme解释器。我知道单点表示法意味着用多个参数构造一对或定义一个lambda。但后来我发现 '(3 . 4 . 5) 评估为 '(4 3 5) 及 它将打印(奇怪的是#\newline没有打印) 有人能解释一下双点符号的含义吗?来自 如果读取器在 匹配的括号,如果是一对分隔的.s 围绕除第一个和最后一个元素以外的任何元素, 结果是一个包含所包围元素的列表 s作为第一个元素,在 阅读顺序。该公约支持一种 读取器级别的中缀符号 Racket为中缀函数调用

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

'(3 . 4 . 5)
评估为

'(4 3 5)

它将打印(奇怪的是#\newline没有打印)

有人能解释一下双点符号的含义吗?

来自

如果读取器在 匹配的括号,如果是一对分隔的.s 围绕除第一个和最后一个元素以外的任何元素, 结果是一个包含所包围元素的列表 s作为第一个元素,在 阅读顺序。该公约支持一种 读取器级别的中缀符号

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

(2 . + . 3) => 5

根据,
(define(a.b.c)…)
应评估为
(define(b.a.c)…)
。所以
(a2)
应该会引发错误“a:undefined”。您的源代码中是否有名为
a
的函数?请注意,双点符号是标准方案中未使用的球拍扩展。可能是@ymonad的重复。是的,“define”是我的打字错误。非常感谢您的评论。在scheme(一种符合标准报告之一的语言)中,这是无效的语法,不起作用。PLT Scheme不是一种Scheme语言,而是一套应用程序。这个新名字叫“球拍”。在这些语言中,您可以选择scheme,这是racket的旧名称,它不是标准报告后面的语言。因为这是
#!球拍
specific与此无关
(4 3)>
(2 . + . 3) => 5