7

Clojureでループ:letを使用するときの修飾子の意味は何ですか?for

4

2 に答える 2

9

:letlet特殊形式で定義できるのと同じ意味で、名前付きの値を定義できます。

(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:when修飾子で使用できるようになったことです。

user=> (for [x [0 1 2 3 4 5]
             :when (even? (* x 3))]
         (* x 3))
于 2013-01-04T12:54:06.750 に答える