Clojure与reduce相反?

Clojure与reduce相反?,clojure,clojurescript,Clojure,Clojurescript,我经常遇到这个问题(在clojurescript中更常见),但没有注意到其他人是如何处理的。这就是我想要的: [:div.container [:div.first "first"] [:div.second "second"] [:div.third "third"]] 假设我是从这样一个集合中构建它的:[“第一”“第二”“第三”] 我将通过一个mapv传递集合,并最终得到(此代码是一个草图,我不使用它): 如果我在container div中使用它,我会得到: [:div.containe

我经常遇到这个问题(在clojurescript中更常见),但没有注意到其他人是如何处理的。这就是我想要的:

[: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@Dima
unfold
更一般,因为它可以生成有限的序列,并且有一个“内部状态”,其“类型”可以是不同类型的结果。这里有两个Clojure实现:Clojure中有一个
iterate
fn(),它看起来与me@Dima
unfold
更一般,因为它可以生成有限的序列,并且具有“内部状态”,其“类型”可以与结果的类型不同。以下是两个Clojure实现: