Clojure ではアルファ変換が安全ではないことに驚きました。
Clojure> ((fn [o] (o 3 2)) +)
5
Clojure> ((fn [or] (or 3 2)) +)
3
Clojure> ((fn [def] (def 3 2)) +)
java.lang.RuntimeException: First argument to def must be a Symbol
(3 つのスニペットすべてが 5 に評価されると予想していました)。
シャドウイングとマクロ、および特殊なフォームが関係する場合のシンボル解決のルールは何ですか?
Try Clojureのバージョンを使用しています。