方案中引用表达式的列表表示

时间:2016-04-04 06:20:33

标签: list scheme quote

在Scheme中,我正在运行(quote (+ 2 3)) returns (+ 2 3)。根据我的理解,引用刚刚告诉Scheme不为某些目的评估我的表达。我试图在不使用引号的情况下制作列表(+ 2 3)。所以我试过了:
输入:(cons '+' (cons 2 (cons 3 '())))
Scheme的回报:(+ cons 2 (cons 3 (quote ())))
- 我不明白为什么我得到这个返回值。我希望(+ 2 3)
键入:(cons '+' (2,3))
Scheme的回报:(+ 2 3)
- 我不明白这是如何运作的。那么,(cons '+' (2,3))(quote (+ 2 3))相同吗?

1 个答案:

答案 0 :(得分:0)

'expression(quote expression)相同,并且expression未被评估。

当您撰写(cons '+ '(cons 2 (cons 3 '())))时,您引用+和第二个参数(cons 2 (cons 3 '()))'没有结束标记。

当显示对时,如果你想知道为什么它没有变成(+ . (cons 2 (cons 3 (quote ()))))

,Lisp系统将默认显示带有尾对的列对作为列表

实施可以选择如何显示'(quote ())''()。我的节目'()会在您展示(quote ())时显示。它们代表完全相同,因此除了可视化之外,它在其他方面并没有什么不同。

`(1 , 2)(list '1 2)相同,因为您是unquoting 2。幸运的是,它是一个数字,它总是评估自己。可能你虽然逗号是元素之间的某种分离,但事实并非如此。它只是简化了大型数据结构的编写,其中只有少数元素是可变的。

(define (test e)
  `(a list with ,e representing some wanted structure))

(test 'test) ; ==> (a list with test representing some wanted structure)