diff options
Diffstat (limited to 'lambda-tools.lisp')
-rw-r--r-- | lambda-tools.lisp | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/lambda-tools.lisp b/lambda-tools.lisp index 24e3cb2..63f5c4d 100644 --- a/lambda-tools.lisp +++ b/lambda-tools.lisp @@ -2,43 +2,6 @@ (in-package #:lambda-tools) -(defun $or (&rest predicates) - "Each argument in PREDICATES is a predicate function of one -argument. Returns a new predicate, call it P, that is the -disjunction of each of the PREDICATES. - -The value of (P X) is the value of the first predicate Q in PREDICATES -such that (Q X) is non-NIL, or is NIL if none of the PREDICATES return -non-NIL. - -That is, the disjuction of PREDICATES is short-circuiting. If any -PREDICATES have side effects, they will be executed only if each of -the preceding predicates in the list returned NIL." - (labels ((disj (x preds) - (if (null preds) nil - (or (funcall (car preds) x) - (disj x (cdr preds)))))) - (lambda (x) (disj x predicates)))) - -(defun $and (&rest predicates) - "Each argument in PREDICATES is a predicate function of one -argument. Returns a new predicate of one argument, call it P, that is -the conjunction of each of the PREDICATES. - -The value of (P X) is NIL if any of the PREDICATES applied to X are -NIL. Otherwise it is the value of the last member in PREDICATES -applied to X. - -That is, the conjunction of PREDICATES is short-circuiting. If any -PREDICATES have side effects, they will be executed only if each of -the preceding predicates in the list returned non-NIL." - (labels ((conj (x preds) - (cond ((null preds) t) - ((null (cdr preds)) (funcall (car preds) x)) - ((funcall (car preds) x) - (conj x (cdr preds)))))) - (lambda (x) (conj x predicates)))) - (defun >> (arg &rest fns) (dolist (fn fns) (setf arg (funcall fn arg))) @@ -49,3 +12,5 @@ the preceding predicates in the list returned non-NIL." (lambda (arg) (apply #'>> arg fns))) + + |