Re: Numbering sections - erratum

Subject: Re: Numbering sections - erratum
From: Daniel Speck <dspeck@xxxxxxxxxxxx>
Date: Tue, 11 Nov 1997 09:07:52 -0500
Richard Light wrote:
...
> 
> You need to declare your 'countable elements' as a list of strings:
> 
> (define (countable-elements)
>  (list "XXX" "YYY" "ZZZ" ...)
> )

First, instead of defining a procedure that returns a constant list you
could just define a variable whose value is the list:

(define countable-elements '("XXX" "YYY" "ZZZ"))

> I thought that I had tested the use of a (countable-elements)-type
> procedure as a means of specifying the list of GI's, and found it to
> work.  However, I can't have done, because it doesn't!
> 
> You can get around this problem by specifying the list of GI's directly
> within the routine:
> 
> (define (preced-count node)
>       (node-list-length
>             (node-list-filter
>                 (lambda (n1)
>                         (case (gi n1)
>                           (("XXX" "YYY" "ZZZ" ...) #t)
>                           (else #f)
>                         )
>                 )
>                 (preced node)
>             )
>       )
> )
> 
> but this isn't very elegant.

You really aren't making much use of the (case ...) construct here. an
(if (member? (gi nl) countable-elements ... ...) might be more
appropriate. 

> 
> My original idea - of declaring the list of fields as a procedure - is
> with hindsight pretty silly anyway.  What you want to do is to pass the
> list of fields as an argument to the (preced-count) procedure; something
> like:
> 
> (define (preced-count node gilist)
>       (node-list-length
>             (node-list-filter
>                 (lambda (n1)
>                         (case (gi n1)
>                           (gilist #t)
>                           (else #f)
>                         )
>                 )
>                 (preced node)
>             )
>       )
> )
> 
> Can anyone advise how you pass a list of strings as an argument in this
> way?  Jade complains about the 'gilist' within the (case ...) statement
> when I use the syntax above since it is trying to interpret it as a
> procedure.

The (case ...) construct does not evaluate the "datum" part of each
case-clause. 

I would just use the following as the lambda expression:

(lambda (nl)
  (member? (gi nl) gilist))

-dan

-- 
Daniel Speck                              e-mail: dspeck@xxxxxxxxxxxx
Research Engineer                          voice:     +1 301.548.7818
Thomson Technology Services Group            fax:     +1 301.527.4094
1375 Piccard Drive, Rockville, MD 20850      WWW:    www.thomtech.com

 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread