在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))
相同吗?
答案 0 :(得分:0)
'expression
与(quote expression)
相同,并且expression
未被评估。
当您撰写(cons '+ '(cons 2 (cons 3 '())))
时,您引用+
和第二个参数(cons 2 (cons 3 '()))
。 '
没有结束标记。
当显示对时,如果你想知道为什么它没有变成(+ . (cons 2 (cons 3 (quote ()))))
实施可以选择如何显示'(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)