Hi people!
I have some experience with plain-vanilla Lisp (not Common Lisp or
Scheme); I have some questions about minor (or not) design decisions
in Clojure:
1) Why the fn special form receives an array as list of parameters?
That is, why Clojure is using:
(fn [x y]....
instead of
(fn (x y) ...
or both
Any rationale behing this decision?
2) I read in core.clj definitions like:
(def
#^{:arglists '([x])
:doc "Return true if x is a String"}
string? (fn string? [x] (instance? String x)))
Why not:
(def
#^{:arglists '([x])
:doc "Return true if x is a String"}
string? (fn [x] (instance? String x)))
that is, fn WITHOUT the name of the defined function. The name after
fn could be used in a recursive call, but, is it needed in this
context? for debugging purpose?
3) Why the redefs like:
;during bootstrap we don't have destructuring let, loop or fn, will
redefine later
(def
#^{:macro true}
let (fn* let [& decl] (cons 'let* decl)))
(def
#^{:macro true}
loop (fn* loop [& decl] (cons 'loop* decl)))
(def
#^{:macro true}
fn (fn* fn [& decl] (cons 'fn* decl)))
from loop* to loop, let* to let, fn* to fn... Are all *-ended names
special forms?
4) why not a def for macros? In the above fragment, I read that "fn is
a macro" is specified in a metadata tag. Why this decision? I'm
playing with an interpreter written in C# (not a compiler) and the
only metadata I need to process, by now, is the meta tag...
TIA
Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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
-~----------~----~----~----~------~----~------~--~---