gpt4 book ai didi

Clojure:我的扁平化实现有什么问题?

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

我一直在解决 4Clojure 上的问题今天,我在 Problem 28 上遇到了麻烦,实现扁平化。

我的代码存在一些明确的问题。

(fn [coll]
((fn flt [coll res]
(if (empty? coll)
res
(if (seq? (first coll))
(flt (into (first coll) (rest coll)) res)
(flt (rest coll) (cons (first coll) res))))) coll (empty coll)))

我可以使用一些关于如何思考几个问题的指导。

  1. 如何确保我不会更改结果列表的顺序? consconj 都在添加元素最有效的地方添加元素(在列表的开头,在向量的结尾等),所以我看不到在使用通用序列时我应该如何对此进行控制。

  2. 如何处理不同类型的嵌套序列?例如,输入 '(1 2 [3 4]) 将输出 ([3 4] 2 1),而输入 [1 2 '(3 4)] 将输出 (4 3 2 1)

  3. 我是否从“正确”的角度来处理这个问题?我应该使用带有累加器的递归内部函数来执行此操作,还是我遗漏了一些明显的东西?

最佳答案

您应该尝试尽可能多地使用 HOF(高阶函数):它可以更清楚地传达您的意图,并且可以避免引入微妙的低级错误。

(defn flatten [coll]
(if (sequential? coll)
(mapcat flatten coll)
(list coll)))

关于Clojure:我的扁平化实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155597/

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