单引号与方案中的双引号

时间:2014-02-04 15:45:56

标签: scheme

我希望这已经没有被问过了。我看到一堆单引号和其他语言的双引号(html,javascript,python)但找不到方案

在解释器的计划中,如果我输入:

  

(某事'x)   据我所知,x将被视为x,而不是像某个变量那样被评估为

另一方面,如果我使用

  

(某事x)

x被评估为它的变量

我知道'是引用的简称(即(引用x))但我得不到的是与双引号有何不同。

如果我输入

  

“你好”   在提示符下,我回来了“你好”

双引号是否唯一区别在于数据的引号?我听说双引号就像一个char数组,但它没有被评估,单引号也没有,所以这就是差异,何时/为什么我会使用一个而不是另一个?

谢谢大家。

2 个答案:

答案 0 :(得分:6)

在Scheme中,单引号和双引号是完全不同的结构。双引号产生一个字符串:

> (string? "foo")
#t

前缀运算符单引号可防止对表达式求值。例如。 (+ 1 2)评估为3,但当您单引号时,您会得到一个由+12组成的列表:

> (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)|