Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure-绘制所有级别的地图_Clojure - Fatal编程技术网

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))