SketchyLISP Reference |
Copyright (C) 2007 Nils M Holm |
<<[filter] | [Index] | [fold-left]>> |
Conformance: R5.92RS Scheme
Purpose:
Test whether all members of a sequence of lists have a
given property.
The property is expressed using an
n-ary
function
p.
P
is applied to a list consisting of the first
member of each given list. Hence there must be
exactly
n
lists. If
p
returns truth, it is applied to a list consisting
of the second member of each given list, etc.
If
p
returns falsity for any set of members,
for-all
returns
#f.
If only one set of members is left to check,
for-all
returns the value of
p
applied to this last set.
All lists passed to
for-all
must have the same length.
When all lists passed to
for-all
are empty, it returns
#t.
Arguments:
P - predicate
A* ... - lists
Implementation:
(define (for-all p . a*) (letrec ((carof (lambda (a) (map-car car a))) (cdrof (lambda (a) (map-car cdr a))) (forall (lambda (a*) (cond ((null? (car a*)) #t) ((null? (cdar a*)) (apply p (carof a*))) (else (and (apply p (carof a*)) (forall (cdrof a*)))))))) (forall a*)))
Example:
(for-all < '(5 7 3) '(6 8 4)) => #t
See also:
exists,
memp,
filter.
<<[filter] | [Index] | [fold-left]>> |