2013-01-04 40 views

回答

5

: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) 
1

你可以我們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))