In Common Lisp and Scheme, if you have an expression that evaluates a symbol, it doesn't evaluate it until you call the function, not when you define it. So you can do this:
Common Lisp: [1]> (defun b () a) B [2]> (defvar a 5) A [3]> (b) 5 Scheme: 1 ]=> (define (b) a) ;Value: b 1 ]=> (define a 5) ;Value: a 1 ]=> (b) ;Value: 5 But you can't do this in Clojure: user=> (defn b [] a) java.lang.Exception: Unable to resolve symbol: a in this context (NO_SOURCE_FILE:1) But if you def a to something, you can then redef it and it will use the value defined later: user=> (def a nil) #=(var user/a) user=> (defn b [] a) #=(var user/b) user=> (def a 5) #=(var user/a) user=> (b) 5 So is there a reason that Clojure tries to resolve symbols when you define a function? The downside of this is that when you have a file with multiple functions in it that call each other, you have to make sure they are defined in order of dependency. --~--~---------~--~----~------------~-------~--~----~ 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 To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---