如果我将矩阵定义为:
(def m1 [[1 2 3][4 5 6][7 8 9]])
如何计算clojure中向量内的向量。我知道(计数m1)将返回3,这是我在初始向量中的向量数,但我不记得如何计算内向量(自从我不得不处理以来已经很长时间了)任何lisp方言)。另外我不想展平矢量,然后计算它,因为我需要单独计算值(即我想返回3,3,3,因为每个内部向量有3个元素。我猜的最后一个限制是我想在不使用地图的情况下这样做,因为我意识到我可以做到(地图计数m1)。
答案 0 :(得分:2)
这实际上非常简单,只需致电:
(map count m1)
或者如果你想把你的结果也放在矢量中:
(mapv count m1)
答案 1 :(得分:2)
您需要使用map
。它将count应用于向量中的每个元素并返回计数列表。
(def m1 [[1 2 3][4 5 6][7 8 9]])
(map count m1)
=> (3 3 3)
答案 2 :(得分:2)
您的编辑:“我想在不使用地图的情况下执行此操作。”
(defn counts [vs]
(loop [vs vs, cs []]
(if (empty? vs)
cs
(recur (rest vs), (conj cs (count (first vs)))))))
答案 3 :(得分:0)
一个答案很好,但要用计数。假设不使用计数也不使用地图
((fn [lst] (循环[l lst,n 0] (如果(空?l) ñ (recur(rest l)(inc n)))))'(1 2 3))