2011-12-30 38 views
7

Vì vậy, tôi muốn trước tiên thực thi một loạt mã và rồi hỏi người dùng xem anh ấy có muốn thực hiện lại điều đó không. Tôi nghĩ cách thuận tiện nhất để làm điều này sẽ là một do-while loop như trong C++, và kể từ khi tôi có thể dường như không tìm thấy bất kỳ chức năng do-while trong Clojure, tôi đã viết như sau:Vòng lặp trong khi ở Clojure?

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

Would có một cách tốt hơn (như trong Clojure-ish thành ngữ hơn) cách viết vĩ mô này, hoặc có lẽ một cách tốt hơn để làm những gì tôi muốn mà không đi qua các tuyến đường do-trong khi?

Trả lời

14

Đây là một phiên bản hơi thay đổi của Clojure's while macro, nơi thử nghiệm được thực hiện sau khi đánh giá cơ thể:

(defmacro do-while 
    [test & body] 
    `(loop [] 
    [email protected] 
    (when ~test 
     (recur)))) 
Các vấn đề liên quan