Lisp 列表操作问题

Lisp list manipulation issue

我有这个表情,

(write (cdr (car' ('(p q) r))))

http://ideone.com/bkZv20

给出 ((P Q)) 作为输出。我整天都在摸不着头脑,但仍然无法弄清楚这是如何工作的。

只做 car 部分给出,

(write (car' ('(p q) r)))

给出 '(P Q)

然后,根据我的说法 (cdr '(P Q)) 应该给出 (Q) 作为输出。

最终答案如何,'(P Q)是我的问题。

你有一个额外的引用(第一个被粘在 car 但仍然正确解析)在那里导致引用的引用,所以你基本上拥有的是:

(write (cdr (car '((quote (p q)) r))))

car 后,您只剩下数据:

(quote (p q))

再次取 cdr 结果数据:

(p q)

如您所见。如果用

看车的车代替
(write (car (car '((quote (p q)) r))))

你应该看到

quote

本身。请记住,'(a b)(quote (a b)) 是同一回事,无论您使用什么,打印输出都可能显示任何一种形式。

所以你要做的就是删除多余的引号,即:

(write (cdr (car '((p q) r))))