If I understand the OP correctly, he wants let* to imitate this macro.
(define-syntax named-let*
(syntax-rules ()
((named-let* name ((var val) ...)
body ...)
(let* ((var val) ...)
(let name ((var var) ...)
body ...)))))
-Patrick
On Wed, May 29, 2013 at 5:47 AM, Jörg F. Wittenberger <
[email protected]> wrote:
> On May 27 2013, Michele La Monaca wrote:
>
> R5RS doesn't specify this kind of syntax (nor Chicken supports it):
>>>>
>>>> (let* loop ((a <init>) (b a))
>>>> <body>)
>>>>
>>>> To me it seems a missing piece of syntax. Am I wrong?
>>>>
>>>
>>> I've missed it occasionally as well, but I'm not sure it's *that* useful.
>>>
>>
>> Of course that's something we all can live without, but let me expose
>> a concrete example just for reference.
>>
>
> So if I understood your intentions correctly you are
> after a syntax
>
> (let* loop ((a X) ...) BODY)
>
> within BODY you want to *call* (loop P1 P2 ...) and have P1, P2 ...
> evaluated left-to-right?
>
> If so, better forget it! (Otherwise forget the rest of this mail).
>
> There is a good reason, why this is not implemented anywhere:
> LET is syntax, it's not a value bound to any variable.
> the "loop" defined by a named let is an ordinary first class
> procedure. Parameters to procedures are evaluated in an unspecified
> order.
>
> In order to make your example work, you wold need LOOP to become
> syntax... thus you could not pass by value to any other procedure
> anymore.
>
>
> ...........
>
>
>
>
>
>
>
>
>
> ______________________________**_________________
> Chicken-users mailing list
> [email protected]
> https://lists.nongnu.org/**mailman/listinfo/chicken-users<https://lists.nongnu.org/mailman/listinfo/chicken-users>
>
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users