';cdadr&x27;lisp中嵌套数据表的研究

';cdadr&x27;lisp中嵌套数据表的研究,lisp,common-lisp,Lisp,Common Lisp,在研究cons、cdr和car处理列表时,我尝试了以下方法: (cadr '('(1) '(2))) '(2) 这将按预期给出列表中的第二项。 鉴于以下情况: (cdadr '('(1) '(2))) ((2)) 数据是如何与代码协调的,并且仍然没有给出错误 这是如何评估的 '(2)上的cdr应该给出nil,这是正确的。为什么不在上面 [我对clisp和stackoverflow都是新手,请原谅。]因为有引号。你应该写(cadr'((1)(2)) 在您的列表中,(caadr'('(1)'(2

在研究
cons
cdr
car
处理列表时,我尝试了以下方法:

(cadr '('(1) '(2)))
'(2)
这将按预期给出列表中的第二项。 鉴于以下情况:

(cdadr '('(1) '(2)))
((2))
数据是如何与代码协调的,并且仍然没有给出错误

这是如何评估的

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


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

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

在您的列表中,
(caadr'('(1)'(2))
产生
QUOTE

实际上,您的列表
'('(1)'(2))
实际上是
'((引号(1))(引号(2)))
,这可以更好地说明为什么会得到这个结果。

是一个特殊的运算符,它返回单个未赋值的参数。表单
(quote…
可以缩写为
”…
。由于
由读取器处理,因此表单

'('(1) '(2)))
实际上读起来和

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

(quote (2))

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

这一切都是正确的,但我建议为Lisp学习者澄清这一补充:
'(2)
(问题中的
cadr
)只是
(quote(2))
的简写。
cdadr
cadr
的其余部分(除第一个元素外),即
((2))