如果求值,为什么这两个表达式都在这个 clojure 中?

Why are both expressions in this clojure if evaluated?

如果我用

创建一个新项目
lein new quil foo

然后将 src/foo/core.clj 减少到

(ns foo.core
  (:require [quil.core :as q]
            [quil.middleware :as m]))

(defn draw [state]
  (if (< (rand) 0.5)
    (q/line 0 0 500 500)
    (q/line 0 500 500 0)))

(q/defsketch foo
  :title "Try this at home"
  :size [500 500]
  :draw draw
  :features [:keep-on-top]
  :middleware [m/fun-mode])

并用 (use 'foo.core) 评估 lein repl 中的程序,两条线都被绘制(即我得到一个大 X)。 (if (< (rand) 0.5) true false) 按预期工作,那么我缺少什么?

大概draw被调用了很多次——如果它只绘制一次屏幕就不是一个交互性很强的框架了!有些时候,你随机选择画一条线,有时又画另一条线;而且您也永远不会删除。结果,他们两个都出现在屏幕上。