Lisp列表操作问题

时间:2016-02-23 22:52:49

标签: list lisp common-lisp cdr

我有这个表达,

(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)是我的问题。

1 个答案:

答案 0 :(得分:6)

你有一个额外的引用(第一个坚持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))))