【发布时间】:2012-05-25 04:29:01
【问题描述】:
这是99 Lisp problems 中的第 7 个:通过将每个列表替换为其元素(递归),将列表(可能将列表作为元素保存)转换为“平面”列表。我尝试了几种解决方案,例如来自#2680864 或from here。它们都可以工作,但是如果我正在展平包含引用元素的列表,我会遇到问题。例如:
> '(a 'b c)
(A 'B C)
> '(a (quote b) c)
(A 'B C)
> (flatten '(a 'b c))
(A QUOTE B C)
在后一种情况下,我想得到:
(A 'B C)
似乎 ' 的内部表示妨碍了这项任务! SBCL、CLISP、ECL……它们的行为方式都相同。
【问题讨论】:
-
您遇到的问题是由于 LISP 读取表达式时引号符号 (') 转换为 (quote ...) 的事实。为了更容易阅读输出,当 LISP 打印您的列表时会发生相应的转换。因此,让 LISP 将其读取为列表时,无法区分两者。
标签: list common-lisp quote flatten