我希望这已经没有被问过了。我看到一堆单引号和其他语言的双引号(html,javascript,python)但找不到方案
在解释器的计划中,如果我输入:
(某事'x) 据我所知,x将被视为x,而不是像某个变量那样被评估为
另一方面,如果我使用
(某事x)
x被评估为它的变量
我知道'是引用的简称(即(引用x))但我得不到的是与双引号有何不同。
如果我输入
“你好” 在提示符下,我回来了“你好”
双引号是否唯一区别在于数据的引号?我听说双引号就像一个char数组,但它没有被评估,单引号也没有,所以这就是差异,何时/为什么我会使用一个而不是另一个?
谢谢大家。
答案 0 :(得分:6)
在Scheme中,单引号和双引号是完全不同的结构。双引号产生一个字符串:
> (string? "foo")
#t
前缀运算符单引号可防止对表达式求值。例如。 (+ 1 2)
评估为3
,但当您单引号时,您会得到一个由+
,1
和2
组成的列表:
> (define three '(+ 1 2))
> three
(+ 1 2)
> (car three)
+
> (cadr three)
1
> (caddr three)
2
对于名为quote
的运算符来说,它实际上是语法糖,您可以通过引用两次来验证:
> ''foo
(quote foo)
答案 1 :(得分:0)
重要的是“未评估”并不意味着“未解析”。
比较
>'(+ a b)
(mcons '+ (mcons 'a (mcons 'b '())))
>(string->symbol "(+ 1 2)")
'|(+ 1 2)|