在Racket中编写函数时,我意外地将两个单引号放在符号前面而不是一个.即我意外地写了''并且发现了一些看似奇怪的嵌套引号的行为.我正在使用DrRacket并使用Racket lang和R5RS lang进行测试.
(write (pair? (quote (quote a))))
Run Code Online (Sandbox Code Playgroud)
打印:#t.
(write (car (quote (quote a))))
Run Code Online (Sandbox Code Playgroud)
打印:报价
但
(write (quote (quote a)))
Run Code Online (Sandbox Code Playgroud)
和
(write '(quote a)))
Run Code Online (Sandbox Code Playgroud)
两个都打印:'a
有人能告诉我为什么在Scheme(和Racket)中使用函数对吗?解释(引用(引用a)))作为一对两个元素引用和a,但函数write打印出'a而不是(引用a).
在句子'周围加上引号()并quote在其周围包装表单是完全相同的.也就是说,他们read是同一个词.
所以以下所有表达式在Scheme中都是相同的:
''a
'(quote a)
(quote 'a)
(quote (quote a))
Run Code Online (Sandbox Code Playgroud)
该quote形式是指"解释未来为基准随之而来---即使它包含另一个quote".子句用括号括起来,所以它是一个列表; 内在quote只是一个象征.
在某些情况下,打印机使用读取器缩写,如'输出中的引号().不过,我有点惊讶你必须write这样做; 对我来说,它总是写作(quote a).