Clojure中的Do-while循环?

8

首先,我想执行一堆代码,然后询问用户是否要再次执行。我认为最方便的方法是像在C ++中使用do-while循环一样,由于我似乎找不到Clojure中的do-while函数,因此编写了以下代码:

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

有没有更好的方式编写这个宏,或者可能有更好的方法来实现我的需求而不必使用do-while循环?(指与Clojure语言更符合习惯的方式)

1个回答

17
这是Clojure的while的稍作修改的版本,其中测试在评估主体后进行:
(defmacro do-while
  [test & body]
  `(loop []
     ~@body
     (when ~test
       (recur))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接