gpt4 book ai didi

haskell - 一次解构一个列表的两个元素 (Clojure)

转载 作者:行者123 更新时间:2023-12-02 06:18:49 26 4
gpt4 key购买 nike

这个问题有多种形式。例如,给定输入 '(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))))))

理想情况下,列表将被延迟使用和生成。谢谢。

最佳答案

(for [[a b] (partition 2 '(1 2 3 4 5 6))
i [b a]]
i)

或者类似于 haskell 版本的东西:

(defn helper
([] (list))
([x] (list x))
([x y & r] (concat [y x] (apply helper r))))

(apply helper '(1 2 3 4 5 6))

关于haskell - 一次解构一个列表的两个元素 (Clojure),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com