Composition

Functional composition.

alexandria:compose fn &rest fns* ⇒ function

Compose function that applies its arguments to each in turn.

(compose #'fn2 #'fn1) ;⇒ (lambda (x) (fn2 (fn1 x)))

alexandria:multiple-value-compose fn &rest fns* ⇒ function

Compose functions that return multiple values. fn1(x,y)fn2(x1,y1) ⇒ x2,y2

(funcall (multiple-value-compose #'fn2 #'fn1) x y) ;⇒ x2,y2

alexandria:disjoin pred &rest preds* ⇒ function

(disjoin #'zerop #'oddp) ;≈ (lambda (x) (or (zerop x) (oddp x)))

alexandria:conjoin pred &rest preds* ⇒ function

(conjoin #'zerop #'oddp) ;≈ (lambda (x) (and (zerop x) (oddp x)))

alexandria:curry fn &rest args* ⇒ function

(funcall (curry #'list 'a 'b) 'c 'd) ;⇒ (A B C D)

alexandria:rcurry fn &rest args* ⇒ function

(funcall (rcurry #'list 'a 'b) 'c 'd) ;⇒ (C D A B)

complement function ⇒ complement-function

Return new function with same arguments and side effects as function, but with the opposite truth value.

(funcall (complement #'numberp) 1)          ;⇒ NIL
(funcall (complement #'member) 'd '(a b c)) ;⇒ T

(complement fn) ;≈ #'(lambda (&rest args) (not (apply fn args)))

constantly value ⇒ function

Return a function taking any number of arguments, which always returns value.

(setf f (constantly "hi"))
(funcall f)                        ;⇒ "hi"
(mapcar (constantly 3) '(a b c d)) ;⇒ (3 3 3 3)

identity object ⇒ object

Returns its own argument object. Intended for functions that require a function argument.

(identity 23)                                    ;⇒ 23
(mapcan #'identity (list (list 1 2 3) '(4 5 6))) ;⇒ (1 2 3 4 5 6)