4
我想知道在Clojure中使用for
循環時修飾符:let
是什麼意思?在Clojure中使用:let修飾符
我想知道在Clojure中使用for
循環時修飾符:let
是什麼意思?在Clojure中使用: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)
你可以我們e :let
在列表理解中創建綁定,如let
。
引述clojure documentation的例子:
user=> (for [x [0 1 2 3 4 5]
:let [y (* x 3)]
:when (even? y)]
y)
(0 6 12)
的技巧是,你現在可以在:while
和:when
改性劑使用y
,而不是寫東西像
user=> (for [x [0 1 2 3 4 5]
:when (even? (* x 3))]
(* x 3))
任何具體的例子嗎? –