"alux" <alu...@googlemail.com> said:

> I got a very basic question about the concept of "special form". What
> is correct, multiple selections allowed:
> 
> [  ] A special form is what can be implemented by a macro.

Wrong. Macros cannot remove the need for special-forms, at least not in a real 
interpreter. In a metacircular implementation, you can replace special-forms 
with calls to the base-level implementation. For instance, if you evaluate 'if' 
at base-level, then you can use it to define 'cond' at base-level.

> [  ] Every macro gives a special form.

They can all be reduced to a number of expressions that cannot be implemented 
by neither macros nor functions. 

These expressions can be evaluated using normal functions if you have lazy 
evaluation of arguments. So, if you have lazy-eval, there's no need for 
special-forms.

> [  ] Only a macro that doesn't evaluate some of its arguments gives a
> special form.

You could say that.

> [  ] A special form is always built in, and cannot be implemented in
> the language itself.

Unless you have lazy-eval.

> [  ] Special forms are exactly the things that can be called, but dont
> evaluate all of their arguments. (Macros and build-ins, at least for
> eager languages.)
> 
> [  ] The concept of special form doesnt have anything to do with
> eagerness or lazyness.

Wrong. It has everything to do with laziness. If you have one, you don't need 
the other.

Please note that, the concept of special-forms is a compromise and I don't 
think anyone would want to have them. A language designer has to make a choice 
as to whether to have special forms or not. If they don't want special-forms, 
then they should provide lazy evaluation of arguments.

Some introduce functional parameters in order to provide lazy evaluation of 
arguments but that choice has its own trade-offs since it introduces a kind of 
dynamic scoping.

Kind regards,
SinDoc

-- 
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

Reply via email to