Clojure:相当于 Common Lisp 中的 "do"

标签 clojure lisp common-lisp

新手 Lisp 问题,抱歉我的无知。

Clojure 中 Common Lisp 的 do 是什么?

最佳答案

Clojure 避免了这些类型的顺序绑定(bind)形式,但可以使用 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))))

关于Clojure:相当于 Common Lisp 中的 "do",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982237/

相关文章:

Clojure资源路径及其他

Clojure - 如何检查协议(protocol)中的类型提示是否正确?

Clojure:从序列中查找顺序项

lisp - CCL 突破文件/目录名称中的非法字符?

lisp - 对多个原子使用读取时条件化

clojure - Clojure 中的惯用表达简化

c - 启用宏的语言如何跟踪源代码以进行调试?

append - LISP 列表不 append 和打印两次

vector - 如果 lisp 中的字符串是向量,为什么我不能使用 svref 访问第一个元素?

emacs - 更改 Common Lisp REPL 中文本的颜色