2016-02-23 167 views
0

我有这样的表现,Lisp语言列表操作问题

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

+0

这是什么神秘'car''功能,您似乎可以用?你真的想用'''引号两次吗? –

+0

我收到了这样的表达方式!看看链接, – saruftw

+0

我想你可能会找到[在嵌套引用列表中替换元素添加新元素的答案?](http://stackoverflow.com/questions/24370500/replace-elements-in-nested-quoted -lists-adds-new-elements)有帮助。 –

回答

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)))) 
+0

但是,我得到这个答案的原因是什么? – saruftw

+0

我编辑了第一段代码,你可以看到现在会发生什么? –

+0

你能否分解流程(每一步的结果)?会使它更容易理解。谢谢 。 – saruftw