|
Subject: Re: Nodes and counting From: Dave Love <d.love@xxxxxxxx> Date: 30 Sep 1997 20:11:01 +0100 |
>>>>> "Frank" == Frank Christoph <christo@xxxxxxxxxxxxxxxxxx> writes:
Frank> At the risk of making a mountain out of a molehill, how about this:
I don't think it's been tested!
Frank> (define (or-map f #!rest bs)
Frank> (apply or (map f bs))
You can't apply `or'.
Frank> (define (curry f x) ; N.B., arity(f) > 1
Frank> (lambda (!#rest xs) (apply f (cons x xs))))
[It's better to avoid consing and write `(apply f x xs)' and,
actually, f could be unary.]
Frank> (define (gid=? x #!optional str)
Frank> (cond
Frank> ((and (node-list? x) (string? str))
Frank> (string=? x str))
Frank> ((string? x)
Frank> (string=? (current-node) x))
Frank> (else
Frank> (error "gid=?: expected (gid=? [<node>] <string>)"))))
The args to `string=?' are clearly wrong there.
Frank> Here's a slightly shorter version, but I don't think Jade
Frank> implements node-list-some?. (Of course, you can always
Frank> implement it yourself. There's a sample in the standard.):
Frank> (let ((pred (lambda (n) (or-map (curry gid=? n) "child2" "child3")))
Frank> (if (node-list-some? pred (follow (current-node))) 0em 2em))
Could the predicate be just this?
(lambda (snl) (member (gi snl) '("CHILD2" "CHILD3")))
Frank> Remember, you have to be careful with or-map.
Frank> In a lazy language it's an occasionally useful combinator,
Frank> but in DSSSL the #!rest arguments will all get evaluated no
Frank> matter what they are. Compare:
Frank> (define (undef) (undef))
Frank> (define (id x) x)
Frank> (or #t (undefined)) ==> #t
Frank> (or-map id #t (undefined)) ==> <doesn't terminate>
Frank> As long as you apply or-map only to constants you won't run
Frank> into any trouble, though.
This is surely nothing to do with the particular function that's given
the bogus argument! It does, though, explain why you can't apply `or'
-- it's a special form.
DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: Nodes and counting, Frank Christoph | Thread | RE: Nodes and counting, Pawson, David |
| RE: Nodes and counting, Pawson, David | Date | ANNOUNCE: DocBook Modular Style She, Norman Walsh |
| Month |