这个问题有多种形式。例如,给定输入 '(1 2 3 4 5 6),我们可能希望交换偶数和奇数对之间的值。输出将是'(2 1 4 3 6 5)。
在 Haskell 中,这相当简单:
helper [] = []
helper [x] = [x]
helper (x : y : ys) = y : x : helper ys
我写了一些 Clojure 代码来完成相同的任务,但我觉得可能有一种更清洁的方法。关于如何改进这一点的任何建议?
(defn helper [[x y & ys]]
(cond
(nil? x) (list)
(nil? y) (list x)
:else (lazy-seq (cons y (cons x (helper ys))))))
理想情况下,列表会被懒惰地消耗和产生。谢谢。