【问题标题】:Do-while loop in Clojure?Clojure 中的 Do-while 循环?
【发布时间】:2012-01-30 08:19:14
【问题描述】:

所以我想先执行一堆代码,然后然后询问用户是否想再执行一次。我认为最方便的方法是使用 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 路线?

【问题讨论】:

    标签: clojure functional-programming


    【解决方案1】:

    这里是Clojure's while macro 的一个稍有改动的版本,测试是在评估正文后完成的:

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

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2016-07-01
      • 2018-05-09
      • 2015-07-03
      • 2016-02-21
      • 2010-11-06
      • 2020-11-26
      • 1970-01-01
      • 2015-02-16
      相关资源
      最近更新 更多