gpt4 book ai didi

algorithm - 在 Clojure 中将嵌套向量减少到另一个

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:37:00 25 4
gpt4 key购买 nike

在 Clojure 中处理此类问题的惯用方式是什么?

我有:

(def data1
[1 [2 3]])

(def data2
[1 [[2 [3 [4]]]
[22 33]]])

我想得到:

[1 2 3] 

[[1 2 3 4]
[1 22 33]]

分别。内部向量的嵌套级别可能具有不同的长度。

我无法理解此类输入的性质并寻求帮助。基本上,一个函数应该将输入(它是一个向量)映射到一个输出(也是向量),本质上,它是从它的头部到最里面的元素的所有“路线”的向量。这是一个模糊的解释,将不胜感激。

最佳答案

(defn transform [[f & r]]
(let [rr (apply concat r)]
(if (= (flatten rr) rr)
(vec (cons f rr))
(mapv #(if (vector? %)
(vec (cons f (flatten %)))
[f %])
rr))))

;测试用例

(transform [1 [2 3]]) => [1 2 3]
(transform [1 [[2 [3 [4]]] [22 33]]]) => [[1 2 3 4] [1 22 33]]
(transform [1 [[2 [3 [4]]] [22 33] 44]]) => [[1 2 3 4] [1 22 33] [1 44]
(transform [1]) => [1]
(transform [1 [2]]) => [1 2]

关于algorithm - 在 Clojure 中将嵌套向量减少到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57706123/

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