Provide an implementation of function composition.

master
Christina Whyte 13 years ago
parent 6d43c4f987
commit 6eeb692a00
  1. 10
      dash-functional.el
  2. 8
      dev/examples.el

@ -52,6 +52,16 @@ number of args, and returns a list containing the result of
applying each fn to the args (left-to-right)."
(lambda (&rest args) (mapcar (lambda (x) (apply x args)) fns)))
(defun -compose (&rest fns)
"Takes a list of functions and returns a fn that is the
composition of those fns. The returned fn takes a variable
number of arguments, and returns the result of applying
each fn to the result of applying the previous fn to
the arguments (right-to-left)."
(lambda (&rest args)
(car (-reduce-r-from (lambda (fn xs) (list (apply fn xs)))
args fns))))
(defun -applify (fn)
"Changes an n-arity function FN to a 1-arity function that
expects a list with n items as arguments"

@ -422,7 +422,13 @@
(defexamples -juxt
(funcall (-juxt '+ '-) 3 5) => '(8 -2)
(-map (-juxt 'identity 'square) '(1 2 3)) => '((1 1) (2 4) (3 9))))
(-map (-juxt 'identity 'square) '(1 2 3)) => '((1 1) (2 4) (3 9)))
(defexamples -compose
(funcall (-compose 'square '+) 2 3) => (square (+ 2 3))
(funcall (-compose 'identity 'square) 3) => (square 3)
(funcall (-compose 'square 'identity) 3) => (square 3)
(funcall (-compose (-compose 'not 'even?) 'square) 3) => (funcall (-compose 'not (-compose 'even? 'square)) 3)))
(defexamples -applify
(-map (-applify '+) '((1 1 1) (1 2 3) (5 5 5))) => '(3 6 15)

Loading…
Cancel
Save