diff --git a/README.md b/README.md index 6e8a367..02bdfc0 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ Or you can just dump `dash.el` in your load path somewhere. * [-contains?](#-contains-list-element) `(list element)` * [-partial](#-partial-fn-rest-args) `(fn &rest args)` * [-rpartial](#-rpartial-fn-rest-args) `(fn &rest args)` +* [-applify](#-applify-fn) `(fn)` * [->](#--x-optional-form-rest-more) `(x &optional form &rest more)` * [->>](#--x-form-rest-more) `(x form &rest more)` * [-->](#---x-form-rest-more) `(x form &rest more)` @@ -506,6 +507,16 @@ Requires Emacs 24 or higher. (funcall (-rpartial '- 5 2) 10) ;; => 3 ``` +### -applify `(fn)` + +Changes an n-arity function `fn` to a 1-arity function that +expects a list with n items as arguments + +```cl +(-map (-applify '+) '((1 1 1) (1 2 3) (5 5 5))) ;; => '(3 6 15) +(-map (-applify (lambda (a b c) (\` ((\, a) ((\, b) ((\, c))))))) '((1 1 1) (1 2 3) (5 5 5))) ;; => '((1 (1 (1))) (1 (2 (3))) (5 (5 (5)))) +``` + ### -> `(x &optional form &rest more)` Threads the expr through the forms. Inserts `x` as the second diff --git a/dash.el b/dash.el index a5e40bb..30106c2 100644 --- a/dash.el +++ b/dash.el @@ -473,6 +473,11 @@ Requires Emacs 24 or higher." `(closure (t) (&rest args) (apply ',fn (append args ',args)))) +(defun -applify (fn) + "Changes an n-arity function FN to a 1-arity function that +expects a list with n items as arguments" + (apply-partially 'apply fn)) + (defmacro -> (x &optional form &rest more) "Threads the expr through the forms. Inserts X as the second item in the first form, making a list of it if it is not a list diff --git a/examples.el b/examples.el index 14b38e1..05738ee 100644 --- a/examples.el +++ b/examples.el @@ -206,6 +206,10 @@ (funcall (-rpartial '- 5) 8) => 3 (funcall (-rpartial '- 5 2) 10) => 3)) +(defexamples -applify + (-map (-applify '+) '((1 1 1) (1 2 3) (5 5 5))) => '(3 6 15) + (-map (-applify (lambda (a b c) `(,a (,b (,c))))) '((1 1 1) (1 2 3) (5 5 5))) => '((1 (1 (1))) (1 (2 (3))) (5 (5 (5))))) + (defexamples -> (-> "Abc") => "Abc" (-> "Abc" (concat "def")) => "Abcdef"