I suppose that would depend on the specifications for how various objects are cast to functions. For instance, vectors, maps, sets, keywords, etc. have their own specific ways of acting as functions. Do you know where that is specified?
On Sunday, 26 May 2013 18:35:55 UTC-4, Simon Katz wrote: > > Cool; thanks. That's an implementation-level explanation, which is fine > as far as it goes. > > Can anyone point at a specification-level explanation? > > > On Sunday, 26 May 2013 23:18:57 UTC+1, JvJ wrote: >> >> Actually, I spoke WAY too soon. >> >> It looks like it has to do with the way that Var is cast to IFn. >> >> >> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java >> >> Check out lines 391 and 410. When invoked, the result of fn() is >> invoked. fn() casts deref() (the data contained by the var) into a >> function. >> >> If the var contains another var, casting that var to an IFn will result >> in a recursive call. >> >> For example: >> >> f3 casts f2 to an IFn. >> f2 casts f1 to an IFn. >> f1 casts the function to an IFn (resulting in the function). >> >> So the "chaining together" is defined in the invoke method and the >> casting process. >> >> On Sunday, 26 May 2013 17:33:24 UTC-4, Simon Katz wrote: >>> >>> If I define a chain of vars like this... >>> >>> (defn f1 [] 42) >>> >>> (def f2 #'f1) >>> >>> (def f3 #'f2) >>> >>> ...when I call f3 the chain of vars is followed: >>> >>> (f3) ; => 42 >>> >>> Out of curiosity, where is this following-the-chain defined? >>> >>> I looked at http://clojure.org/evaluation which simply says "The result >>> of the evaluation of the operator is [...] cast to IFn (the interface >>> representing Clojure functions), and invoke() is called on it". >>> >>> --Simon >>> >> -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.