gpt4 book ai didi

clojure - Clojure 中嵌套向量的映射函数

转载 作者:行者123 更新时间:2023-12-02 17:49:59 25 4
gpt4 key购买 nike

我正在尝试为 Clojure 编写一个更通用的映射函数,但无法在嵌套向量上映射函数。特别是,映射应该接受一个参数 n,它允许嵌套的级别规范。

这是我到目前为止所写的内容,但由于嵌套向量而失败:

(defn cloj-maps 
([f x] (vec (map f x)))
([f x y] (vec (map f x y)))
([f x y z] (vec (map f x y z))))

这是我尝试输入/输出的示例:

输入 1: (inc [[1 2] [3 4]] 1) 其中 inc 是输入函数,[[...]] 是嵌套向量,1 是级别规范。

输出1:[[2 3] [4 5]]

象征性地[f[a b] f[c d]]在顶层进行映射。

输入 2:(包括 [[1 2] [3 4]] 2)

输出 2:[[3 4] [5 6]]

象征性地 [f[f[a] f[b]] f[f[c] f[d]]] 我使用 f 作为函数,并替换了 {1,2,3,4}->{ A B C D}。这里输入参数 2 意味着在级别 1 和 2 上的映射,因此 f “包裹”在每个元素和每个向量周围。

最佳答案

我不明白您为什么要这样做,但这可能会满足您的要求:

(defn cloj-maps [f n x]
(let [f' (nth (iterate #(comp f %) identity) n)]
((fn deep [y]
(if (vector? y)
(mapv deep y)
(f' y)))
x)))

输出示例:

user=> (cloj-maps inc 0 [[1 2] [3 4]])
[[1 2] [3 4]]
user=> (cloj-maps inc 1 [[1 2] [3 4]])
[[2 3] [4 5]]
user=> (cloj-maps inc 2 [[1 2] [3 4]])
[[3 4] [5 6]]
user=> (cloj-maps inc 3 [[1 2] [3 4]])
[[4 5] [6 7]]
user=> (cloj-maps inc 4 [[1 2] [3 4]])
[[5 6] [7 8]]

关于clojure - Clojure 中嵌套向量的映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170619/

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