7

在 Racket 中编写函数时,我不小心在符号前面放了两个单引号,而不是一个。即我不小心写了''a 并发现了一些看起来很奇怪的嵌套引号行为。我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试。

(write (pair? (quote (quote a))))

打印:#t。

(write (car (quote (quote a))))

印刷品:报价

(write (quote (quote a)))

(write '(quote a)))

两者都打印:'a

有人能告诉我为什么在 Scheme(和 Racket)中使用函数对吗?将 (quote (quote a))) 解释为一对两个元素 quote 和 a ,但函数 write 打印出 'a 而不是 (quote a) 。

4

1 回答 1

8

在术语周围加上引号 ( ') 并quote在其周围加上表格是相同的。也就是说,他们read对同一个词。

所以以下所有表达式在 Scheme 中都是相同的:

''a
'(quote a)
(quote 'a)
(quote (quote a))

quote表格的意思是“将接下来的内容解释为数据——即使它包含另一个quote”。子项用括号括起来,所以它是一个列表;内在quote只是一个象征。

'在某些情况下,打印机在其输出中使用诸如引号 ( ) 之类的阅读器缩写。不过,我有点惊讶你必须write这样做。对我来说,它总是写为(quote a).

于 2011-11-02T17:20:44.757 回答