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