Getting back to the initial post, this would be the (almost) equivalent code in java:
public class Test{ static int x = 1; void bindingX(int val){ x = val; } int dummyFn2(){ return x + 1; } void dummyFn(){ System.out.println("entering function: " + x); int x = 100; System.out.println("after let: " + x); x = dummyFn2(); System.out.println("after let and dummy2: " + x); bindingX(100); System.out.println("after binding: " + x); x = dummyFn2(); System.out.println("after binding and dummy2: " + x); } public static void main(String[] args){ new Test().dummyFn(); } } The confusion lies in poor naming style, conflating local names with global names, and not writing functions in a functional style. On Nov 20, 7:40 pm, kunjaan <kunj...@gmail.com> wrote: > Even though I have used Clojure, I hadn't looked at the scoping rules > in detail. I am getting more confused as I read the documentations. I > made a small test to try out the scoping resolutions and am apalled at > the complexity. Could somebody explain the intent and various rules > that Clojure uses? > > (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 -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en