Interesting - thanks! Looks like doing `symbol is a good way of telling whether something is a special symbol or not. If syntax-quote results in namespace-qualification it then it *is not* special (with the exception of import*); if it does not namespace qualify it, then it *is* special.
Previously I've been using the fact that (source symbol) comes up with "Source not found" to indicate that a symbol might be special. But not sure how reliable this method is. I imagine there might be other situations where the source code cannot be found. Cheers, Mark. On Wednesday, June 18, 2014 6:26:04 PM UTC+9:30, Ambrose Bonnaire-Sergeant wrote: > > Hi Mark, > > Here's a brief doc on special forms: > http://clojure-doc.org/articles/language/macros.html#special-forms-in-detail > > Thanks, > Ambrose > > > On Wed, Jun 18, 2014 at 12:13 PM, Mark P <pier...@gmail.com <javascript:>> > wrote: > >> Thanks Tassilo for the explanation - much appreciated! >> >> I have been searching the web and searching clojure text books for the >> last two hours trying to find the answer to this same question. Finally I >> stumbled onto this thread! >> >> I realize that hiding the complexity of distinctions between fn / fn* and >> let / let* etc might make the documentation more accessible for some users, >> but for others (like me and presumably also Plínio) it makes it really hard >> to track down what is *really* going on. I wish this distinction was part >> of the formal documentation. >> >> Does anyone know of documentation anywhere that does include these kinds >> of distinction? >> >> Thanks, >> >> Mark. >> >> On Thursday, 6 March 2014 02:27:26 UTC+10:30, Tassilo Horn wrote: >> >>> Plínio Balduino <pbal...@gmail.com> writes: >>> >>> Hi Plínio, >>> >>> > Clojure.org says fn and let are special forms, but using the macro >>> > sourceshows that both are macros calling fn* and let* respectivelly. >>> > >>> > So fn and let are "special special forms", or clojure.org is >>> > incorrect/outdated? >>> >>> Well, they are correct from a user's point of view. One never uses the >>> real special forms fn* and let*. >>> >>> > If fn and let are really special forms and not macros, could you >>> > explain why? >>> >>> fn and let (and also loop) are macros around the real special forms fn* >>> and let* (and loop*) that add support for destructuring. For example, >>> >>> (let [[a b] [1 2]] >>> (+ a b)) >>> >>> expands to >>> >>> (let* >>> [vec__8592 [1 2] >>> a (clojure.core/nth vec__8592 0 nil) >>> b (clojure.core/nth vec__8592 1 nil)] >>> (+ a b)) >>> >>> where the destructuring has been transformed to "normal" code already. >>> >>> Bye, >>> Tassilo >>> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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/d/optout.