blob: 7eb1d51540d114f84f6c2299b661b73b4302c868 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
;;; hofs.lisp -- higher-order functions
(in-package :lambda-riffs)
(defun labmda-if (pred then &optional (else (constantly nil)))
"Returns a function that applies PRED and conditionally executes
THEN when PRED returned non-nil or otherwise executes ELSE. Each of
PRED, THEN, and ELSE are assumed to accept the same arguments."
(lambda (&rest args)
(if (apply pred args)
(apply then args)
(apply else args))))
(defun lambda-cond (&rest pairs)
"PAIRS is a list: PRED1 F1 PRED2 F2 ...
Returns a function that applies FN to the argumetns for the first N
such that PREDN returns non-nil. Each of the PREDN and FN are
assumed to accept the same arguments."
(lambda (&rest args)
(loop for (pred fn . more) on pairs by #'cddr
when (apply pred args)
return (apply fn args))))
|