4

在学习cons和处理列表时,我尝试了以下操作cdrcar

(cadr '('(1) '(2)))
'(2)

它按预期给出了列表中的第二项。而以下给出:

(cdadr '('(1) '(2)))
((2))

数据如何与代码协调一致并且仍然不出错?

这是如何评价的?

'(2) 上的 cdr 应该给出 nil,这是确实的。为什么不在上面?

[我对 clisp 和 stackoverflow 都是新手,所以请原谅我。]

4

2 回答 2

8

quote是一个特殊的运算符,它返回其单个未评估的参数。(quote ...)可以使用'as缩写形式'...。由于'由读者处理,表格

'('(1) '(2)))

实际上读起来和

(quote ((quote (1)) (quote (2)))

quote参数的最外层应用程序((quote (1)) (quote (2)))返回该参数。该cadr参数是列表

(quote (2))

其第一个元素是符号quote,其第二个元素是单个元素的列表2

于 2013-09-09T16:38:47.453 回答
2

因为引号。你应该写(cadr '((1) (2)))

有了你的清单,(caadr '('(1) '(2)))产量QUOTE

实际上,您的列表'('(1) '(2))是真的'((quote (1)) (quote (2))),这可能会更好地说明您获得此结果的原因。

于 2013-09-09T11:28:16.263 回答