迭代

有很多方法可以遍历一个集合。

dotimes 会执行给定的表达式一定次数, 一个本地binding会被给定值:从0到一个给定的数值. 如果这个本地binding是不需要的 (下面例子里面的 card-number ), 可以用下划线来代替, 看例子:

(dotimes [card-number 3]
  (println "deal card number" (inc card-number))) ; adds one to card-number

注意下上面例子里面的 inc 函数是为了让输出变成 1, 2, 3 而不是 0, 1, 2。上面代码的输出是这样的:

deal card number 1
deal card number 2
deal card number 3

while 会一直执行一个表达式只要指定的条件为true. 下面例子里面的 while 会一直执行,只要这个线程没有停:

(defn my-fn [ms]
  (println "entered my-fn")
  (Thread/sleep ms)
  (println "leaving my-fn"))

(let [thread (Thread. #(my-fn 1))]
  (.start thread)
  (println "started thread")
  (while (.isAlive thread)
    (print ".")
    (flush))
  (println "thread stopped"))

上面代码的输出是这样的:

started thread
.....entered my-fn.
.............leaving my-fn.
thread stopped