我想知道在 Clojure 中:let
使用循环时修饰符是什么意思?for
问问题
759 次
2 回答
9
:let
允许您定义命名值,就像 let 特殊形式允许您这样做一样:
(for [i (range 10)
:let [x (* i 2)]]
x) ;;=> (0 2 4 6 8 10 12 14 16 18)
相当于:
(for [i (range 10)]
(let [x (* i 2)]
x)) ;;=> (0 2 4 6 8 10 12 14 16 18)
:when
与(或)结合使用时除外:while
:
(for [i (range 10)
:let [x (* i 2)]
:when (> i 5)]
x) ;;=> (12 14 16 18)
(for [i (range 10)]
(let [x (* i 2)]
(when (> i 5) x))) ;;=> (nil nil nil nil nil nil 12 14 16 18)
于 2013-01-04T12:53:20.437 回答
1
您可以使用:let
在列表推导中创建绑定,例如let
.
引用clojure 文档的示例:
user=> (for [x [0 1 2 3 4 5]
:let [y (* x 3)]
:when (even? y)]
y)
(0 6 12)
诀窍是您现在可以y
在:while
and:when
修饰符中使用,而不是编写类似的东西
user=> (for [x [0 1 2 3 4 5]
:when (even? (* x 3))]
(* x 3))
于 2013-01-04T12:54:06.750 回答