Lisp 列表操作问题
Lisp list manipulation issue
我有这个表情,
(write (cdr (car' ('(p q) r))))
给出 ((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))))
我有这个表情,
(write (cdr (car' ('(p q) r))))
给出 ((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))))