我有一个家庭作业问题,需要我(在向量中(从向量向量中打印指定的第 n 个索引。例如,如果我输入[1 2 3 4] [5 6 7 8] [9 10 11 12]
并输入指定第 n 个索引 1 的函数,则我的结果必须[2 6 10]
。
非常困惑,不擅长Clojure,只是一个Java/Python人。
我已经尝试使用一个接受向量和变量作为第 n 个的函数。但它返回整个向量和为 x 输入的值。
(defn column [vector x]
(cond
(empty? vector)
nil
:else
(column (nth vector x))))
如果我输入:user ==> column vector 0
结果是这样的:[1 2 3 4] [5 6 7 8] [9 10 11 12]
0
而不是:[1 5 9]
解决这个问题的一个惯用的 clojure 方法是使用 map
(def v [[1 2 3 4] [5 6 7 8] [9 10 11 12]])
(defn column [coll pos]
(map #(nth % pos) coll))
nth
函数给出向量中的第 n 个元素。map 函数将遍历每个内部向量,并使用给定的列值调用nth
。
结果将是所需列中的值序列。