获取列表的第一个和最后一个原子并附加它们

时间:2009-09-30 01:56:06

标签: list lisp

说我有这个清单

'((c d) (4 6) (m n) (z z)) 

如何对每个内部列表的第一个和最后一个元素进行分组并将其追加到末尾,以便我的输出结果如下:

(c 4 m z z n 6 d)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

这是Clojure中的一种方式(这是一种lisp方言):

user=> (def l '((c d) (4 6) (m n) (z z)) )
user=> (concat (map first l) (reverse (map second l)))
(c 4 m z z n 6 d)

真正取决于您的问题,哪种实施最适合。

答案 1 :(得分:0)

您需要从两端构建列表。我建议如下:

  1. 从现有的
  2. 中创建两个列表
  3. 当输入列表为空时,将两个新列表放在一起,在将它们放在一起之前将第二个列表反转。
  4. 所以你应该期望函数调用看起来像:

    (myFunc inputList forwardList willBeBackwardList)
    

    inputList为空时,您想要执行类似

    的操作
    (append forwardList (reverse willBeBackwardList))
    

    (确切的内置函数名称会因您使用的lisp而异。)