从列表中返回元素

时间:2009-12-07 15:28:08

标签: lisp common-lisp

我正在努力学习口齿不清,因为我正在迈出第一步。 我如何获得以下列表中的c元素表单:(a b (c.d))

我尝试过:(caar (last '(a b (c.d))))但它返回c.d而不仅仅是c
但是,如果c之间有空格,则可以使用。 ,d ie:(caar (last '(a b (c . d))))

我正在尝试解决的问题是指定的列表没有空格。可以这样做,还是练习中的拼写错误?

感谢。

LE :Uisng GNU Clisp http://clisp.cons.org/ 它可能是由实施引起的问题吗?

2 个答案:

答案 0 :(得分:4)

你的代码是正确的,这是一个错字(或者可能是一个非常糟糕的字体?)。

在Lisp中(Common Lisp和Scheme是我刚才测试的两个,我不知道Clojure),[几乎]符号之间的唯一划分是空格和圆括号。即使 。用作cons的文字语法,如果键入'(c.d),则列表中会出现一个符号,而不是符号单元格中的两个符号。

例如,

'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规范执行。

答案 1 :(得分:2)

我看起来你在练习中输错了。

(c.d)是用虚线对符号表示的cons单元。

这是一个关于此http://c2.com/cgi/wiki?DottedPairNotation

的更多链接