Plaster
New
List
Login
text
default
anonymous
2025.03.29 03:59:23
(defmacro condlet (&rest clauses) "CONDLET is a cond-like macro where each clause is of the form ((symbol predicate) form). The value of `predicate` is bound to `symbol` and is available for use in `form`. The condlet form (condlet ((s1 p1) f1) ((s2 p2) f2) … ((sn pn) fn)) is equivalent to (let ((s1 p1)) (if s1 f1 (let ((s2 p2)) (if s2 f2 (... (let ((sn pn)) (if sn fn))))))) Example ------- (let ((xs (list 1 2 3 4 5))) (condlet ((us (member 9 xs)) (apply #'max us)) ((vs (member -1 xs)) (apply #'min vs)) ((ws (member 2 xs)) (sort (copy-list ws) #'>)))) => (5 4 3) " (condletter clauses)) (defun condletter (clause-list) (when clause-list (destructuring-bind (clause . clauses) clause-list (destructuring-bind ((sym pred) form) clause `(let ((,sym ,pred)) (if ,sym ,form ,(condletter clauses)))))))
Raw
Annotate
Repaste
Edit