sar*_*ftw 0 lisp list common-lisp cdr
我有这个表达,
(write (cdr (car' ('(p q) r))))
Run Code Online (Sandbox Code Playgroud)
它给出((P Q))了输出.我整天都在摸不着头脑,仍然无法弄清楚这是怎么回事.
只做car部分给出,
(write (car' ('(p q) r)))
Run Code Online (Sandbox Code Playgroud)
给'(P Q).
然后,根据我(cdr '(P Q))应该给出(Q)的输出.
最后的答案'(P Q)是怎样的,是我的问题.
你有一个额外的报价(第一个坚持car但仍然正确解析)导致引用的报价,所以你基本上有:
(write (cdr (car '((quote (p q)) r))))
Run Code Online (Sandbox Code Playgroud)
car以此为例,只留下数据:
(quote (p q))
Run Code Online (Sandbox Code Playgroud)
再次采用cdr这个结果的数据:
(p q)
Run Code Online (Sandbox Code Playgroud)
正如你所观察到的 如果你看车的车而不是
(write (car (car '((quote (p q)) r))))
Run Code Online (Sandbox Code Playgroud)
你应该看到了
quote
Run Code Online (Sandbox Code Playgroud)
本身.请记住,'(a b)并且(quote (a b))是相同的事情,并且您使用的任何内容的打印输出都可能显示任何一种形式.
所以你想要做的只是删除额外的报价,即:
(write (cdr (car '((p q) r))))
Run Code Online (Sandbox Code Playgroud)