2009-12-07 174 views
1

我正在尝试学习lisp,并且当我让我的第一步被卡住了。 我怎样才能得到下表C元件形式:(a b (c.d))从列表中返回一个元素

我已经试过:(caar (last '(a b (c.d))))但它返回c.d,而不是只有c
如果有C的空间然而这工作。 ,即即:即:(caar (last '(a b (c . d))))

我试图解决的问题有没有空格指定列表。可以这样做吗?或者这是练习中的错字?

谢谢。

LE:Uisng GNU CLISP http://clisp.cons.org/ 是否有可能,这个问题它是由执行引起的?

+3

听起来像一个错字。你在用什么Lisp? – CBFraser 2009-12-07 15:30:26

+0

这个问题与您已经发布的其他问题有何不同? – 2009-12-07 16:04:40

+0

我真的很陌生,第一课,我只是想明白,所以这个问题似乎不同于我: - ?对不起,如果它是相似的 – daniels 2009-12-07 17:44:29

回答

4

你的代码是正确的,这是一个错字(或者可能是一个非常糟糕的字体?)在练习中。在Lisp中(Common Lisp和Scheme是我刚才测试的两个,我不知道Clojure),[几乎]符号之间的唯一区别是空格和括号。即使 。用作cons的文字语法,如果您输入'(c.d),则在列表中获得一个符号,而在cons单元中不会获得两个符号。

例如,

'c.d  ; is one symbol 
'(c . d) ; is two symbols in a single cons cell 
'((c)d) ; is two symbols, the first in a nested list 

编辑:由于您使用的Common Lisp,这里是the list of relevant charactersthe reader algorithm。总而言之,()终止字符,而.不是。 CLisp根据Common Lisp规范执行。

相关问题