X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Futils.lisp;fp=src%2Futils.lisp;h=87e8e0adeeb968a3b81a0349c5c4d19bd6cf5f3a;hb=90744af0fec0148a48141cb1490240641ef3b386;hp=d23aff755ca0124606aad07a3334149dcd288f1b;hpb=f3f10e21f646bddb8c1817e496be199afc65b648;p=fiveam.git diff --git a/src/utils.lisp b/src/utils.lisp index d23aff7..87e8e0a 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -55,26 +55,6 @@ current list of values." (return-from item))))) (mapcar #'funcall (mapcar #'cdr collectors)))) -;;;; ** Anaphoric conditionals - -(defmacro if-bind (var test &body then/else) - "Anaphoric IF control structure. - -VAR (a symbol) will be bound to the primary value of TEST. If -TEST returns a true value then THEN will be executed, otherwise -ELSE will be executed." - (assert (first then/else) - (then/else) - "IF-BIND missing THEN clause.") - (destructuring-bind (then &optional else) - then/else - `(let ((,var ,test)) - (if ,var ,then ,else)))) - -(defmacro aif (test then &optional else) - "Just like IF-BIND but the var is always IT." - `(if-bind it ,test ,then ,else)) - ;;;; ** Simple list matching based on code from Paul Graham's On Lisp. (defmacro acond2 (&rest clauses) @@ -96,9 +76,9 @@ ELSE will be executed." (defun binding (x binds) (labels ((recbind (x binds) - (aif (assoc x binds) - (or (recbind (cdr it) binds) - it)))) + (if-let (value (assoc x binds)) + (or (recbind (cdr value) binds) + value)))) (let ((b (recbind x binds))) (values (cdr b) b))))