【发布时间】:2018-10-22 22:07:18
【问题描述】:
我想从向量的向量中获取值,并将该值作为参数传递给另一个函数。我想在向量的向量集合中调用其他函数。
例如:
这是演示代码,将解释我正在尝试的内容
(defn demo
[arg1 arg2 arg3 arg4 arg5]
(println "====== in Demo=======")
(println arg1 arg2 arg3 arg4 arg5)
)
(def vv [["item1" "item2" "item3" 4] ["item5" "item6" "item7" 80.0] .....])
我想要一个可以遍历 vv 并获取每个 v 的值并将其作为参数传递给 demo
的函数 (def somefun
iterate [i vv] demo (get v 0) (get v 1) (get v 2) (get v 3))
;;这应该对 vv 中的所有向量重复
【问题讨论】:
-
尝试对问题进行框架化,以便函数的工作以它们的返回值来表达,这可以根据您的喜好来复杂。不要打印结果 - 退回它们。然后你会发现 Clojure 有很多高阶函数,可以从向量的向量中表达你想要的大部分东西。
-
谢谢@Thumbnail 我在上面的声明中使用了 println,只是为了理解。我想以自己的方式使用这些论点。
-
(doseq [v vv] (apply demo v))假设 demo 预期的参数数量与v的长度相同,但在您的示例向量中并非如此。 -
@jas 非常感谢!它在传递参数时确实有效,但我想 doseq 存在一个问题。它不返回任何东西对吗?假设我从 Demo 函数中获得了一些价值。那么我可以在这里评估为
(and (doseq [v vv] (apply demo v))例如:假设演示函数发送一组参数 true,接下来它发送给我 false 等等。 .. 所以在这里我会得到(and (true false true true false .... .. .. ))doseq 将始终返回 nill -
@jas 嘿,我想我可以使用 for 而不是 doseq 和 apply,它还会返回从 接收到的值演示函数;
(for [v vv] apply demo v)