Несмотря на то, что я использовал Clojure, я не рассматривал подробные правила. Я больше смущен, когда читаю документацию. Я сделал небольшой тест, чтобы опробовать резолюции по определению области охвата и рассердился на сложность. Может ли кто-нибудь объяснить намерение и различные правила, которые использует Clojure?
(def x 1)
(defn dummy-fn2[]
(+ x 1))
(defn dummy-fn[]
(println "entering function: " x)
(let [x 100]
(println "after let: " x)
(let [x (dummy-fn2)]
(println "after let and dummy2: " x)
(binding [x 100]
(println "after binding: " x)
(let [x (dummy-fn2)]
(println "after binding and dummy2: " x))))))
1:2 foo=> (dummy-fn)
entering function: 1
after let: 100
after let and dummy2: 2
after binding: 2
after binding and dummy2: 101
nil