質問

Say-hello-to-first-personはうまくいきます、なぜ皆さん、皆さんを言っていないのですか?

(defpartial greeting [name]
  [:p.alert "Hello " name ", how are you?"])

(defn say-hello [name]
  (append $content (greeting name)))

(defn say-hello-to-first-person [names]
  (say-hello (first names)))

(defn say-hello-to-everyone [names]
  (map say-hello names))

(say-hello-to-first-person ["Chris" "Tom" "Jim" "Rocky"])
(say-hello-to-everyone ["Chris" "Tom" "Jim" "Rocky"])
.

役に立ちましたか?

解決

あなたは doseq 、Clojureの「Foreach」:

(doseq [name names]
  (say-hello name))
.

mapは遅延シーケンスを生成するため、実際には実際にアクセスするまで(ここではここにしない)にアクセスするまで、それらのどれも評価されず、副作用は発生しません。

もう1つの選択肢は、→href="http://clojuredocs.org/clojure_core/clojure.core/dorun" real="nofollow"> dorun の周囲に評価を強制することです。この作品があなたの理解を助けるかもしれない理由について考える(mapはここで慣用のアプローチですが)。

他のヒント

@edbondは彼のコメントで言うMap Fnは必要な瞬間まで評価しないでください。地図fnは遅延seqを返します。

これはマップ fnです。 FにFを適用した結果からなる遅延シーケンスを返します。 各コールの最初の項目のセットに続いてSETにFを適用する のいずれかのCOLLのいずれかが 疲れきった。他のCORMの残りの項目は無視されます。関数 fはcollの引数を受け入れる必要があります。

値があなたのコードの特定の部分で評価される必要がある場合は、 doall または dorun

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top