xda*_*liu 0 lisp scheme syntactic-sugar
在Scheme中,如果我想要一个列表,请说(1 2 3),我会写'(1 2 3)
.通常情况下,这很好,但它实际上相当于(quote (1 2 3))
,与之不完全相同(list 1 2 3)
.这会产生不同结果的一个例子:
'(1 2 (+ 0 3)) -> (1 2 (+ 0 3))
(list 1 2 (+ 0 3)) -> (1 2 3)
Run Code Online (Sandbox Code Playgroud)
第二行是否有语法糖?对于矢量有.例如:
#(1 2 (+ 0 3)) -> #(1 2 3)
(vector 1 2 (+ 0 3)) -> #(1 2 3)
Run Code Online (Sandbox Code Playgroud)
如果列表中没有这样的糖,那将是非常具有讽刺意味的,因为列表的使用方式比Scheme中的向量更常用!
如果您需要评估列表的一部分,可以使用quasiquoting和unquoting,如下所示:
`(1 2 ,(+ 0 3))
=> '(1 2 3)
Run Code Online (Sandbox Code Playgroud)