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

Re: bug in (ANY ... )

    Procedures ANY? and ANY have a bug, at least on the zoo, in that they
    will only work with unary predicates:
I remember seeing someone else send a fix for that once (Meehan?).  
    The following procedure works properly and may be used to shadow the
    official T procedures:
    (DEFINE (any pred? . L)
       (COND ( (null? (car L))
             ( (apply pred? (map car L))
               (apply any (cons pred? (map cdr L))) ) ) )
A few changes should be made:

    (DEFINE (any pred? . L)
       (COND ( (memq? nil L)                    ; change 1
             ( (apply pred? (map car L)) )      ; change 2
               (apply any pred? (map cdr L)) ) ) )  ; change 3
1) you want to stop as soon as any of the lists is empty
   (what I wanted to write was (any? null? L) but...)
2) any should return pred?'s value, not always T
3) apply takes the form (apply fun arg arg ... arg-list)

Change 3 is minor, but the other two are needed for correctness.

Hope this helps.