Clojure 如何从具有副作用的函数中获取返回值集合?

Clojure 如何从具有副作用的函数中获取返回值集合?,clojure,Clojure,正在寻找从具有副作用的函数生成返回值集合的方法,以便将其提供给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) ?))) 更新 以下是Jan回答后我得到的信息: (defn function

正在寻找从具有副作用的函数生成返回值集合的方法,以便将其提供给
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) ?)))
更新

以下是Jan回答后我得到的信息:

(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
会导致内存不足异常。

映射不应该解决这个问题吗

(defn call-function-with-side-effects []
  (take-while true? (map function-with-side-effects (iterate inc 0))))
如果你想让所有的副作用都生效,那就使用。相关:


请注意,我将第二行中的
true
替换为假设这就是您的意思。

Jan,如果您能对问题的更新部分发表意见,我将不胜感激。谢谢尤里,说得好,我应该明确说明
doall
应该去哪里。我已经修改了答案。现在能用了吗?明白了,太好了!谢谢你帮助一个Clojure noob!非常乐意帮忙,伙计。
(defn call-function-with-side-effects []
  (doall (take-while true? (map function-with-side-effects (iterate inc 0)))))