Bre*_*rto 3 functional-programming clojure
我今天一直在研究4Clojure的问题,我在问题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)))
Run Code Online (Sandbox Code Playgroud)
我可以用一些关于如何思考几个问题的指针.
如何确保我不更改结果列表的顺序?cons并且conj两者都在添加元素的地方添加元素(在列表的开头,向量的末尾等),所以我看不出在使用泛型时我应该如何控制它序列.
如何处理不同类型的嵌套序列?例如,'(1 2 [3 4])输出将输出([3 4] 2 1),而输入[1 2 '(3 4)]将输出(4 3 2 1)
我是否从"正确"角度接近这个?我应该使用带累加器的递归内部函数来执行此操作,还是我错过了一些明显的东西?
您应该尝试尽可能多地使用HOF(更高阶函数):它可以更清楚地传达您的意图,并使您免于引入微妙的低级错误.
(defn flatten [coll]
(if (sequential? coll)
(mapcat flatten coll)
(list coll)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |