diff options
author | Colin Okay <cbeok@protonmail.com> | 2020-08-13 10:38:30 -0500 |
---|---|---|
committer | Colin Okay <cbeok@protonmail.com> | 2020-08-13 10:38:30 -0500 |
commit | e8c0f8e58b0039d8d3ed886654a5452168168436 (patch) | |
tree | 5e9034a3b8cee68a4dad8bb3d35e8ae3a3f457b3 /lambda-tools.lisp | |
parent | 61c06fc10ee2bad8d810d342a707677ede2c5f78 (diff) |
removed replaced $and $or with macros; added reader macro for $$
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))) + + |