有没有map的替代方法可以将函数应用于Clojure中的所有序列?

unj*_*nj2 4 clojure

我有一个功能

(defn change-score [docid termid]
    (do (dosync (alter *documents-scores* assoc docid  (+ 1 (*documents-scores* docid))))
            nil)  )

(defn vector-space[]
    (loop [terms (count (deref *term-hash*))]
        (if (zero? terms)
            nil
            (do
                (dorun (map (fn[docid](change-score docid terms)) (doc-list terms)))
                (recur (dec terms))))))
Run Code Online (Sandbox Code Playgroud)

在函数中是否有替代映射?

Tim*_*ley 6

doseq正是为此目的.

(doseq [x xs] (side-effect x))
Run Code Online (Sandbox Code Playgroud)

  • 作为刚刚开始关注Clojure的人(并且非常喜欢它),我不得不说doseq的链接文档并不是那么清楚.它是指如何在形式中完成的事情?如果是这样的话,那个的文档也可能更好(关于文档的最好的事情就是这个例子.) (2认同)
  • 是的,有一个wiki可以找到方便的例子:http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples/do_Macros#doseq (2认同)