Clojure中的Do-while循环?

时间:2011-12-30 03:37:48

标签: clojure functional-programming

所以我想首先执行一堆代码,然后询问用户是否要再次执行此操作。我认为最方便的方法是使用C ++中的do-while循环,因为我似乎无法在Clojure中找到任何do-while函数,所以我写了以下内容:

(defmacro do-while
  "Executes body before testing for truth expression"
  [test & body]
  `(do (do ~@body) (while ~test ~@body)))

是否会有更好的(如更惯用的Clojure-ish)编写这个宏的方式,或者更好的方式来做我想要的而不经过do-while路线?

1 个答案:

答案 0 :(得分:15)

以下是Clojure's while macro的略微更改版本,其中测试是在评估正文后完成的:

(defmacro do-while
  [test & body]
  `(loop []
     ~@body
     (when ~test
       (recur))))