]> git.eshelyaron.com Git - emacs.git/commitdiff
(Calling Functions): Document `apply-partially'.
authorEli Zaretskii <eliz@gnu.org>
Sun, 19 Oct 2008 14:57:50 +0000 (14:57 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sun, 19 Oct 2008 14:57:50 +0000 (14:57 +0000)
doc/lispref/ChangeLog
doc/lispref/functions.texi
etc/NEWS

index 55343fcbdf7c2218264b8968d03f445987e742c8..ffb7b48cb4c5132db7f1a01ce57d4552d38f5852 100644 (file)
@@ -1,5 +1,7 @@
 2008-10-19  Eli Zaretskii  <eliz@gnu.org>
 
+       * functions.texi (Calling Functions): Document `apply-partially'.
+
        * hooks.texi (Standard Hooks): Mention
        `before-hack-local-variables-hook' and `hack-local-variables-hook'.
 
index 068d05ffc9915b4cc8ea22a82a4b8a9f4bdd1423..4609fc18ceff27346d3db2ab73884bc715809692 100644 (file)
@@ -725,6 +725,41 @@ For an interesting example of using @code{apply}, see @ref{Definition
 of mapcar}.
 @end defun
 
+@cindex partial application of functions
+@cindex currying
+  Sometimes, it is useful to fix some of the function's arguments at
+certain values, and leave the rest of arguments for when the function
+is actually called.  The act of fixing some of the function's
+arguments is called @dfn{partial application} of the function@footnote{
+This is related to, but different from @dfn{currying}, which
+transforms a function that takes multiple arguments in such a way that
+it can be called as a chain of functions, each one with a single
+argument.}.
+The result is a new function that accepts the rest of
+arguments and calls the original function with all the arguments
+combined.  Emacs provides a function for partial evaluation:
+
+@defun apply-partially func &rest args
+This function returns a new function which, when called, will call
+@var{func} with the list of arguments composed from @var{args} and
+additional arguments specified at the time of the call.  If @var{func}
+accepts @var{n} arguments, then a call to @code{apply-partially} with
+@w{@code{@var{m} < @var{n}}} arguments will produce a new function of
+@w{@code{@var{n} - @var{m}}} arguments.
+
+Here's an example of using @code{apply-partially} to produce a
+function @code{incr}, that will increment its argument by one, based
+on the Emacs Lisp primitive @code{+}:
+
+@example
+(fset 'incr (apply-partially '+ 1))
+@group
+(incr 10)
+     @result{} 11
+@end group
+@end example
+@end defun
+
 @cindex functionals
   It is common for Lisp functions to accept functions as arguments or
 find them in data structures (especially in hook variables and property
index a91f17e101c9476d5ce54d615feeb7ac4a1dbf50..6a7783e62933d0432cf631a7ae3d9eca83fd0c05 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1581,6 +1581,7 @@ times the default column width.
 *** `format-seconds' converts a number of seconds into a readable
 string of days, hours, etc.
 
++++
 *** `apply-partially' performs a "curried" application of a function.
 
 *** `read-shell-command' does what its name says, with completion.  It