Clojure-绘制所有级别的地图
我试图创建一个映射函数,它遍历每个元素并应用一个操作。它与Clojure-绘制所有级别的地图,clojure,Clojure,我试图创建一个映射函数,它遍历每个元素并应用一个操作。它与映射函数非常相似,但深入 该函数包含两个参数;一个函数和一个参数 以下是我到目前为止的情况: (defn go-through [op & args] (if-not (sequential? (first args)) (apply op args) (apply (partial map go-through op) args))) 我知道即使不打电话,最后一行也不行。但我不知道还有什么别的办法
映射
函数非常相似,但深入
该函数包含两个参数;一个函数和一个参数
以下是我到目前为止的情况:
(defn go-through
[op & args]
(if-not (sequential? (first args))
(apply op args)
(apply (partial map go-through op) args)))
我知道即使不打电话,最后一行也不行。但我不知道还有什么别的办法
建议
也许我在限制这样一个函数的使用 样本:
user=> (go-through + 1 2)
3
user=> (go-through + [1 2] [3 4])
IllegalArgumentException Don't know how to create ISeq from: clojure.core$_PLUS_ clojure.lang.RT.seqFrom (RT.java:494)
我期待着[4 6]
这个想法适用于在单个元素上运行的任何函数,而不是顺序 请注意,第一行既不起作用,因为“if”条件只是检查第一个参数是否是连续的,然后调用op将检查所有参数
我建议使用或查看其代码;) 这可能是您的解决方案:
(defn go-through [op & args]
(if-not (sequential? (first args))
(apply op args)
(apply map op args)))
(go-through + 1 2 3)
-> 6
(go-through + [1 2] [3 4] [5 6])
-> (9 12)
版本2(固定原始示例)
您能提供一个输入和输出示例吗?它应该保留树结构还是生成一个seq?@ArthurUlfeldt,它应该保留树结构。你想要[4 6]还是[3 7]?我想要
[4 6]
。它将函数映射到两个向量上。我不是在寻找一个reduce
。。。。。出于某种原因,在我使用它的方式中,第一行是有效的,它只是“else”。请查看上面的输出。@Zchpyvr有一个错误。我刚修好。对不起,事实上,这个解决方案在深度超过2时不起作用。@Zchpyvr您能举个例子吗?无论如何,我添加了另一个版本。
(defn go-through [op & args]
(if-not (sequential? (first args))
(apply op args)
(apply map (partial go-through op) args)))
(go-through + [[1 2] [3 4]] [[5 6] [7 8]])
-> ((6 8) (10 12))