我有一个功能
(defn x [w]
(let [[w1 w2 w3] w]
(println w1)
(println w2)
(println w3)))
如果我调用该函数
(x [[1 1] [2 2] [3 3]])
=> [1 1]
[2 2]
[3 3]
这是我所期待的
有没有办法概括这个?在这种情况下,我知道w
是一个包含3个向量的向量,所以我知道[w1 w2 w3]
如果w
是4向量的向量,则最后一个向量不会被设置为任何东西
我想要的是w
是n个向量的向量,然后在函数的let
中将它们设置为[w1 w2 w3 ... wn]
? (注意不一定必须是w1,w2,... wn)
println只是用于调试,因此对函数
并不重要非常感谢任何帮助。
答案 0 :(得分:4)
(defn x [ws]
(dorun (map println ws)))
例如,
(x [[1 1] [2 2] [3 3]])
[1 1]
[2 2]
[3 3]
=> nil
map
依次将println
应用于每个ws
,然后返回
nil
结果为序列,按需(懒惰)。dorun
要求整个序列,丢弃它,
返回nil
。如果您想查看序列,请将dorun
替换为doall
:
(defn x [ws]
(doall (map println ws)))
=> (x [[1 1] [2 2] [3 3]])
[1 1]
[2 2]
[3 3]
=> (nil nil nil)
前者更简洁的替代方案是
(defn x [ws]
(doseq [w ws] (println w)))
......而后者是
(defn x [ws]
(for [w ws] (println w)))