【发布时间】:2012-12-27 18:39:56
【问题描述】:
如果我有一个未知数量的参数,我想用“let”相互绑定,例如:
let [a "hello" b 55 ]
如果我在函数/宏或类似函数中绑定 let 并且我想在列表中循环,我该怎么做?
请注意,在 let 中有 4 个元素,但我只想循环遍历“键”。一个使用示例可能是检查绑定到键的值是否是像 b 这样的数字,即 55
编辑:例如: 请注意,以下内容非常糟糕,但仅用于解释问题:
(defn func [& arguments]
(let [ ~arguments] ((println "omg no way!") (for [x let-list] (number? x (println "roar") )))
输入: (func [a "你好" b 55]
所以基本上: 我想要一个功能:
- 将参数绑定到某种形式的列表,例如:[a b]
- 打印“天哪!”) - 不应该是循环的一部分,应该只在函数中打印一次
- 某种循环,例如 for 循环,它遍历“let-list”,因此它会:“a, is a number? no, is b number? yes, print "roar"
输出: 天哪,没办法 怒吼
再一次: 我想知道是否有一种方法可以访问函数中的 let 中的关键字。正如 for 循环所示,我想访问每个单独的元素并使用该元素执行操作。如果我使用 (for [x arguments] 代替,它会给出: 天哪,没办法, 怒吼 怒吼 (因为 b 与 55 绑定,所以它是一个数字,但 55 也是一个数字,但没有必要使用 55,因为 55 已经与 b 绑定)
【问题讨论】:
-
听起来你想要的是
loop和recur:clojure.org/special_forms#Special Forms--(loop [bindings* ] exprs*) -
输入和输出的例子在这里会有很大帮助
-
这看起来可以用地图更好地实现。但我同意@ArthurUlfeldt 的观点,即一个有上下文的例子真的会帮助我们帮助你。
-
看起来你想要的是
(map second (partition 2 arguments))。