';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))
。