在 Racket 中编写函数时,我不小心在符号前面放了两个单引号而不是一个。即我不小心写了 ''a 并发现嵌套引号的一些行为看起来很奇怪。我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试。
(write (pair? (quote (quote a))))
打印:#t 。
(write (car (quote (quote a))))
打印: 引用
But
(write (quote (quote a)))
and
(write '(quote a)))
两者都打印:'a
有人可以告诉我为什么在Scheme(和Racket)中使用函数对吗?将 (quote (quote a))) 解释为一对两个元素 quote 和 a ,但函数 write 打印出 'a 而不是 (quote a) 。
加上引号 ('
) 围绕一个术语并包裹 aquote
它周围的形状是相同的。也就是说,他们read
到同一个术语。
因此,Scheme 中的以下所有表达式都是相同的:
''a
'(quote a)
(quote 'a)
(quote (quote a))
The quote
形式意味着“将接下来的内容解释为数据——即使它包含另一个数据quote
"。子项带括号,因此它是一个列表;内部quote
只是一个符号。
在某些情况下,打印机使用读者缩写,例如引号 ('
)在其输出中。我有点惊讶你得到了write
不过,要做到这一点;对我来说,它总是写成(quote a)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)