Thank you; that makes sense.  So, if I understand
correctly, essentially, it's syntactic sugar for the
equivalent tail-recursive procedure.

But that brings up the question of whether I can make
a procedure explicitly non-tail-recursive.  E.g., if
the following piece of code

> Z = X|{SMerge Xr Ys}

is always automatically converted to the following
piece of tail-recursive code

> local Temp  in
>   Z = X|Temp
>   {SMerge Xr Ys Temp}
> end

then how can I write the code so that it runs in a
non-tail-recursive manner?

Cheers,

Ben

--- Maximilian Wilson <[EMAIL PROTECTED]> wrote:

> On 11/26/05, Benjamin L. Russell
> <[EMAIL PROTECTED]> wrote:
> > SMerge is declared as a procedure with the three
> > arguments Xs, Ys, and Zs, yet when invoked in the
> line
> >
> > > Zs = X|{SMerge Xr Ys}
> >
> > with only the two arguments Xr and Ys, no illegal
> > arity error is generated.  Why not?
> 
> Because that is syntactic sugar for something else.
> A procedure with N
> arguments can be invoked with N-1 arguments, in a
> context where it is
> being used as if it had a return value. The return
> value is the Nth
> argument. proc{Times A B Z} Z=A*B end is equivalent
> to fun{Times A B}
> A*B end, and in either case you can either say
> Y={Times 4 5} or {Times
> 4 5 Y}. In this case, your code is equivalent to
> 
> local Temp  in
>   Z = X|Temp
>   {SMerge Xr Ys Temp}
> end
> 
> (In the OPI, under the Oz menu, you can ask it to
> "Show Core Syntax"
> and it will give you this same translation or one
> like it.) Thus, you
> see that it really is a 3-ary procedure, so no arity
> error. Trying to
> invoke {SMerge Xr Ys} alone *would* be an arity
> error, as there
> wouldn't be any third argument. Effectively, unlike
> in C++ or Java,
> you can't just "throw away" return values unless you
> do it explicitly.
> IMHO, getting to throw away return values can be
> nice at times but
> isn't worth all the syntactic pain that comes with
> it. Mozart's syntax
> ends up being a lot cleaner, and it seems to be due
> in large part to
> this.
> 
> Max Wilson
> 
> --
> Be pretty if you are,
> Be witty if you can,
> But be cheerful if it kills you.
> 
>
_________________________________________________________________________________
> mozart-users mailing list                           
>    [email protected]
>
http://www.mozart-oz.org/mailman/listinfo/mozart-users
> 

_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to