新手 Lisp 问题,抱歉我的无知。
Clojure 中 Common Lisp 的 do
是什么?
最佳答案
Clojure 避免了这些类型的顺序绑定(bind)形式,但可以使用 while
或 loop
来表达相同的功能 - 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))))
关于Clojure:相当于 Common Lisp 中的 "do",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982237/