4

にフィードできるように、副作用のある関数から戻り値のコレクションを生成する方法を探していますtake-while

(defn function-with-side-effects [n]
  (if (> n 10) false (do (perform-io n) true)))

(defn call-function-with-side-effects []
  (take-while true (? (iterate inc 0) ?)))

アップデート

ヤンの答えの後に私が持っているものは次のとおりです。

(defn function-with-side-effects [n]
  (if (> n 10) false (do (println n) true)))

(defn call-function-with-side-effects []
  (take-while true? (map function-with-side-effects (iterate inc 0))))

(deftest test-function-with-side-effects
  (call-function-with-side-effects))

テストを実行しても何も出力されません。を使用doallすると、メモリ不足の例外が発生します。

4

1 に答える 1

5

map問題を解決するべきではありませんか?

(defn call-function-with-side-effects []
  (take-while true? (map function-with-side-effects (iterate inc 0))))

すべての副作用を有効にしたい場合は、 を使用しますdoall。関連: Clojure で遅延シーケンスを非遅延シーケンスに変換する方法

(defn call-function-with-side-effects []
  (doall (take-while true? (map function-with-side-effects (iterate inc 0)))))

これがあなたの意図したものであると仮定してtrue、2 行目の を置き換えたことに注意してください。true?

于 2013-01-03T15:36:05.603 に答える