在clojure中,是否有类似剂量的函数接收函数而不是身体

vie*_*bel 2 iteration clojure

我想重复执行一个函数来解决它对集合的副作用.常见的方法是:

(defn my-func [x] (println x))
(doseq [x '(1 2 3) ]
       (my-func x))
Run Code Online (Sandbox Code Playgroud)

但是x变量有点麻烦.我更喜欢以下代码:

 ((comp doall map) my-func '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

你认为这是一个优雅的解决方案吗?

ama*_*loy 6

clojure.core/dorun优于doall,因为doall将整个序列保存在内存中以便将其返回给您.dorun回归nil,就像那样doseq.要说语言核心"应该"提供类似domap有点攻击性的东西- 对于一种不鼓励变异和副作用的语言,Clojure已经拥有许多非常接近你想要的功能并且易于组合.