On 16.12.2008, at 02:58, Mark Volkmann wrote:

> I'm trying to understand the difference between these. Is it that
> macros expanded by macroexpand-1 could result in calls to additional
> macros that won't be expanded, but macroexpand will continue expanding
> until no macro calls remain?

Right. Note that only the outermost symbol in the form is checked for  
being a macro; neither macroexpand-1 nor macroexpand will expand  
macros in subexpressions. So the difference matters only if the  
outermost macro expands into a form whose outermost symbol refers  
again to a macro.

> which output almost the same thing:
> (let* [or__2940 (< 2 1)] (if or__2940 or__2940 (clojure.core/or (< 3
> 2) (< 1 2))))
>
> What is "let*"?  (doc let*) doesn't know about it.

It's a more primitive form of let that does not have all the  
features. Destructuring, for example, is done in the let macro, which  
ultimately expands into let*. Look at the definition of let in  
boot.clj for all the details.

Konrad.


--~--~---------~--~----~------------~-------~--~----~
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 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to