Clojure:相当于Common Lisp中的“do”

时间:2014-01-07 21:26:22

标签: clojure lisp common-lisp

Newbie Lisp的问题,抱歉无知。

在Clojure中,Common Lisp的do相当于什么?

1 个答案:

答案 0 :(得分:6)

Clojure避免使用这种顺序绑定表单,但可以使用whileloop表示相同的功能 - 这是每种样式中CLHS的第一个示例:

;; common lisp version
(do ((temp-one 1 (1+ temp-one))
       (temp-two 0 (1- temp-two)))
      ((> (- temp-one temp-two) 5) temp-one)) =>  4

;; clojure, while
(let [temp-one (atom 1)
      temp-two (atom 0)]
  (while (> (- @temp-one @temp-two) 5)
     (swap! temp-one inc)
     (swap! temp-two dec))
  @temp-one)

;; clojure, loop
(loop [temp-one 1 temp-two 0]
  (if (> (- temp-one temp-two) 5)
    temp-one
    (recur (inc temp-one) (dec temp-two))))