guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: unusual let binding (of lp) - in function element->xml from sxml sim


From: Thompson, David
Subject: Re: unusual let binding (of lp) - in function element->xml from sxml simple
Date: Sat, 3 Feb 2024 16:55:29 -0500

Hi Andreas,

On Sat, Feb 3, 2024 at 4:49 PM Andreas Reuleaux <rx@a-rx.info> wrote:
> sxml->xml making use of element->xml above.
> Now with regards to the binding / usage of lp above: it is
> bound / used several times:
>
>
>       (let lp ((attrs attrs)) ...
>       let lp be a function that ... does what?
>
>
>       (lp (cdr attrs)))
>       now call this function with (cdr attrs).
>       What does it do?
>       set attrs to (cdr attrs)?
>
>
>       then similar below
>       (let lp ((body body)) ...
>       ???
>
>
>       (lp (cdr body)))
>       ???
>
>
> For one thing I am used to
>
> (let bindings body)
>
> with bindings being of the form
>  ((x 'foo)
>   (y 'bar))
>
> (i.e. bind x with 'foo, y with 'bar when executing body)
>
> for example, lp is not of this style. Maybe if there is just one variable 
> bound
> one can shortcut this to
>
>   let x 'foo body
>
> Is this what's going on above? And if so:
> then lp is bound to a list of one pair? :
>
> ((attrs attrs))
>
> how come can we call this as a function then later.
>
> And if attrs is a function (which I doubt) that what
> is the application of attrs to attrs?

This is a form of 'let' known as "named let". In the code you
reference, the variable 'lp' is a procedure, short for "loop", and the
let bindings give initial values for the loop. Calling 'lp' will bring
control back to the beginning of the 'let' with the bindings rebound
to new values. It's a convenient shorthand for simple loops.

See 
https://www.gnu.org/software/guile/manual/html_node/while-do.html#index-let-1
for more info.

Hope this helps,

- Dave



reply via email to

[Prev in Thread] Current Thread [Next in Thread]