Scheme中的列表操作

时间:2012-09-27 23:34:01

标签: lisp scheme

  

可能重复:
  Flatten a list using only the forms in “The Little Schemer”

我只想把'(a b(c d)e'变成'(a b c d e) (即,将内部列表的每个成员插入外部列表,同时保持元素的顺序)。

必须有一种简单的方法可以做到这一点,但由于某种原因,我得以逃避。

1 个答案:

答案 0 :(得分:0)

你看到'(a b(c d)e)是一棵树,不是吗?像

这样的东西
a---b
|\--c--d
 \--e 

在此表示中,节点是列表,而叶子是符号。 你可以做什么,它打印树的所有叶子:

  1. 如果树为空(=是空列表),则停止
  2. 如果树不为空,那么
    1. 如果树的CAR是符号,则打印它,然后处理树的CDR
    2. 如果树的CAR是一个列表,则处理树的CAR,然后处理树中的CDR
  3. 一旦你这样做,你就会用“把价值放在某处”来取代“print”。希望这能引导你达到你想要的目标。