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使用map计算列表向量中的元素_Clojure - Fatal编程技术网

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

clojure使用map计算列表向量中的元素,clojure,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)

正如你所看到的,我的第一个元素不知怎么被跳过了。。。至少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)
期望输出为: [13][:24][:32]


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

这似乎是您想要的:

(defn count-each-seq [v]
  (map (fn [s] [(first s) (count s)]) v))
上述计数每个seq函数返回一个向量序列。你可以稍后再打印。 如果在REPL中运行该函数,结果将立即显示

在代码中有三件事要说:

在编写代码时,应该将核心逻辑和表示分离(在本例中为println)。函数应该返回一个值。 您的参数vec实际上是一个函数名clojure.core/vec。选择与现有函数名不冲突的其他名称。 在单词之间使用破折号是clojure或LISP惯例。因此,像count这样的名称可以计算每个序列,而不是camel大小写。
在第一次计数之后,每个序列[v]映射的定义计数如何v@noisesmith哇!看起来更紧凑。这是一样的,只是利用juxt而不是手动构建向量