clojure使用map来计算元素列表的向量

时间:2014-09-24 22:46:09

标签: clojure

正如你所看到的,我的第一个元素以某种方式被跳过...至少println认为它是。

(def example [(:1 :1 :1) (:2 :2 :2 :2) (:3 :3)])
(println example)
(defn countEachSequence [vec]
  (println vec)
  (let [varName (count vec)]
   (println varName) 
   )
)
(map #(countEachSequence %) example)

所需的输出是: ([1 3] [:2 4] [:3 2])

这是命名该组并计算该组中元素的数量。

1 个答案:

答案 0 :(得分:2)

这似乎是你想要的:

(defn count-each-seq [v]
  (map (fn [s] [(first s) (count s)]) v))

上面的count-each-seq函数返回一个向量序列。您可以稍后打印。 如果在REPL中运行该函数,结果将立即显示。

您的代码中有三件事要说:

  • 编写代码时,应将核心逻辑和表示分开(在本例中为println)。你的函数应该返回一个值。
  • 您的参数vec实际上是一个函数名clojure.core/vec。选择与现有功能名称不冲突的其他名称。
  • 在word之间使用破折号是clojure(或LISP)约定。所以请注明count-each-sequence而不是驼峰。