所以我想首先执行一堆代码,然后询问用户是否要再次执行此操作。我认为最方便的方法是使用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路线?
答案 0 :(得分:15)
以下是Clojure's while
macro的略微更改版本,其中测试是在评估正文后完成的:
(defmacro do-while
[test & body]
`(loop []
~@body
(when ~test
(recur))))