0

我有这个表情

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

4

1 回答 1

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))))
于 2016-02-23T23:04:10.573 回答