Clojure与reduce相反?
我经常遇到这个问题(在clojurescript中更常见),但没有注意到其他人是如何处理的。这就是我想要的:Clojure与reduce相反?,clojure,clojurescript,Clojure,Clojurescript,我经常遇到这个问题(在clojurescript中更常见),但没有注意到其他人是如何处理的。这就是我想要的: [:div.container [:div.first "first"] [:div.second "second"] [:div.third "third"]] 假设我是从这样一个集合中构建它的:[“第一”“第二”“第三”] 我将通过一个mapv传递集合,并最终得到(此代码是一个草图,我不使用它): 如果我在container div中使用它,我会得到: [:div.containe
[:div.container [:div.first "first"] [:div.second "second"] [:div.third "third"]]
假设我是从这样一个集合中构建它的:[“第一”“第二”“第三”]
我将通过一个mapv
传递集合,并最终得到(此代码是一个草图,我不使用它):
如果我在container div中使用它,我会得到:
[:div.container [[:div.first "first"] [:div.second "second"] [:div.third "third"]]]
我一直在使用类似于cons
的方法将:div.container
放在mapv
结果的前面。但在我看来,应该有一个更好的方法——就像reduce
的反面。有这样的事吗
编辑:我确实找到了concat
,看起来我以前试过,但我得到了一个序列。我想要一个向量<代码>(vec(concat…)不理想。如何:
(apply vector :div.container
(mapv #(vector (keyword (str "div." %)) %)
["first", "second", "third"]))
其思想是使用apply
将mapv
结果的每个元素作为单个参数传递给vector
另外,apply
在collection参数之前允许其他参数,因此我们可以将:div.container
存放在那里
(在这里,使用mapv
与map
是无关紧要的。)
(另外,reduce
的“反面”通常在其他语言中被调用,但我在核心Clojure库中没有找到类似的函数。)如何:
(apply vector :div.container
(mapv #(vector (keyword (str "div." %)) %)
["first", "second", "third"]))
其思想是使用apply
将mapv
结果的每个元素作为单个参数传递给vector
另外,apply
在collection参数之前允许其他参数,因此我们可以将:div.container
存放在那里
(在这里,使用mapv
与map
是无关紧要的。)
(另外,
reduce
的“反面”通常在其他语言中被调用,但我在核心Clojure库中没有找到类似的函数。)cons
在这里很好——它从Lisp出现以来就一直存在,对于您在这里想要做的事情非常有用
以下是我的做法:
(defn containerize
[tag v]
(let [kw #(keyword (str tag "." %))]
(into []
(cons (kw "container")
(map (fn [x] [(kw x) x]) v)))))
cons
在这里很好——它从Lisp出现以来就一直存在,对于您在这里想要做的事情非常有用
以下是我的做法:
(defn containerize
[tag v]
(let [kw #(keyword (str tag "." %))]
(into []
(cons (kw "container")
(map (fn [x] [(kw x) x]) v)))))
“减少的反面”是减少
(reduce (fn [v s]
(conj v [(keyword (str "div." s)) s]))
[:div.container]
["first" "second" "third"])
“减少的反面”是减少
(reduce (fn [v s]
(conj v [(keyword (str "div." s)) s]))
[:div.container]
["first" "second" "third"])
您是否知道[:ul([:li“one”][:li“two”])]将按预期工作
我想如果你把(mapv f coll)改成
或
你会得到你想要的结果。你知道[:ul([:li“one”][:li“two”])]会按预期工作吗
我想如果你把(mapv f coll)改成
或
你会得到你想要的结果。可能重复的可能重复的可能重复的在clojure中有一个
迭代
fn(),它看起来与me@Dimaunfold
更一般,因为它可以生成有限的序列,并且有一个“内部状态”,其“类型”可以是不同类型的结果。这里有两个Clojure实现:Clojure中有一个iterate
fn(),它看起来与me@Dimaunfold
更一般,因为它可以生成有限的序列,并且具有“内部状态”,其“类型”可以与结果的类型不同。以下是两个Clojure实现: