在研究cons
,cdr
和car
以处理我尝试过的列表时:
(cadr '('(1) '(2)))
'(2)
按预期给出列表中的第二项。 以下给出:
(cdadr '('(1) '(2)))
((2))
如何使数据与代码协调一致并且仍然没有给出错误?
这是如何评估的?
cdr on'(2)应该给nil,这是。为什么不在上面?
[我是clisp和stackoverflow的新手,所以请原谅我。]
答案 0 :(得分:8)
quote
是一个特殊的运算符,它返回单个未评估的参数。表单(quote ...)
可以使用'
缩写为'...
。由于'
由读者处理,因此表格为
'('(1) '(2)))
实际上与
相同(quote ((quote (1)) (quote (2)))
参数quote
的最外层应用程序((quote (1)) (quote (2)))
返回该参数。该参数的cadr
是列表
(quote (2))
第一个元素是符号quote
,第二个元素是单个元素2
的列表。
答案 1 :(得分:2)
由于报价。你应该写(cadr '((1) (2)))
。
根据您的列表,(caadr '('(1) '(2)))
会产生QUOTE
。
实际上,您的列表'('(1) '(2))
确实是'((quote (1)) (quote (2)))
,这可能会更好地显示您获得此结果的原因。