|
Subject: Re: Iteration with named let From: "Henry S. Thompson" <ht@xxxxxxxxxxxxxxx> Date: Wed, 25 Jun 97 10:13:32 BST |
> Here's a function I created to determine if a child has a particular GI:
>
> (define (has-child? %gi% %element%)
> (let loop ((desc-list (children %element%)))
> (if (equal? (gi (node-list-first desc-list)) %gi%)
> #t
> (if (node-list-empty? desc-list)
> #f
> (loop (node-list-rest desc-list))
> )
> )
> )
> )
People have already replied about a one-line way to do this.
There is at least an infelicity in your style, at worst a bug, which
given your gracious willingness to be coached I'll tackle -- usually
in let loops you do the loop check at the top:
(let loop ((desc-list (children %element%)))
(if (node-list-empty? desc-list)
#f
(or (equal? (gi (node-list-first desc-list))
%gi%)
(loop (node-list-rest desc-list)))))
Your code as written asks for the gi of the empty-node-list in any
non-matching case, including the case where %element% had no children,
which probably won't cause an error, but only for pretty subtle
reasons, whereas the above recasting of it doesn't do that, and will
will handle the no-children case cleanly.
ht
DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: Iteration with named let, Paul Prescod | Thread | Re: Iteration with named let, Dave Love |
| Re: Desperate Questions: [1]Absolut, Frank Christoph | Date | Re: DSSSL query feature, James Clark |
| Month |