@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2004
-@c Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
+@c 2004, 2005, 2006 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/functions
@node Functions, Macros, Variables, Top
* Anonymous Functions:: Lambda expressions are functions with no names.
* Function Cells:: Accessing or setting the function definition
of a symbol.
+* Obsolete Functions:: Declaring functions obsolete.
* Inline Functions:: Defining functions that the compiler will open code.
* Function Safety:: Determining whether a function is safe to call.
* Related Topics:: Cross-references to specific Lisp primitives
they are not functions. A symbol is a command if its function
definition is a command; such symbols can be invoked with @kbd{M-x}.
The symbol is a function as well if the definition is a function.
-@xref{Command Overview}.
+@xref{Interactive Call}.
@item keystroke command
@cindex keystroke command
@end defun
@defun subr-arity subr
-@tindex subr-arity
This function provides information about the argument list of a
primitive, @var{subr}. The returned value is a pair
@code{(@var{min} . @var{max})}. @var{min} is the minimum number of
practice).
We often identify functions with the symbols used to name them. For
-example, we often speak of ``the function @code{car}'', not
+example, we often speak of ``the function @code{car},'' not
distinguishing between the symbol @code{car} and the primitive
subr-object that is its function definition. For most purposes, the
distinction is not important.
@var{name}. It returns the value @var{name}, but usually we ignore this
value.
-As described previously (@pxref{Lambda Expressions}),
-@var{argument-list} is a list of argument names and may include the
-keywords @code{&optional} and @code{&rest}. Also, the first two of the
+As described previously, @var{argument-list} is a list of argument
+names and may include the keywords @code{&optional} and @code{&rest}
+(@pxref{Lambda Expressions}). Also, the first two of the
@var{body-forms} may be a documentation string and an interactive
declaration.
By contrast, in programs that manipulate function definitions for other
purposes, it is better to use @code{fset}, which does not keep such
-records.
+records. @xref{Function Cells}.
@end defun
You cannot create a new primitive function with @code{defun} or
The argument @var{sequence} can be any kind of sequence except a
char-table; that is, a list, a vector, a bool-vector, or a string. The
result is always a list. The length of the result is the same as the
-length of @var{sequence}.
+length of @var{sequence}. For example:
@smallexample
@group
-@exdent @r{For example:}
-
(mapcar 'car '((a b) (c d) (e f)))
@result{} (a c e)
(mapcar '1+ [1 2 3])
@end defun
@defun mapc function sequence
-@tindex mapc
@code{mapc} is like @code{mapcar} except that @var{function} is used for
side-effects only---the values it returns are ignored, not collected
into a list. @code{mapc} always returns @var{sequence}.
In Lisp, a function is a list that starts with @code{lambda}, a
byte-code function compiled from such a list, or alternatively a
-primitive subr-object; names are ``extra''. Although usually functions
+primitive subr-object; names are ``extra.'' Although usually functions
are defined with @code{defun} and given names at the same time, it is
occasionally more concise to use an explicit lambda expression---an
anonymous function. Such a list is valid wherever a function name is.
a function defined by another package, it is cleaner to use
@code{defadvice} (@pxref{Advising Functions}).
+@node Obsolete Functions
+@section Declaring Functions Obsolete
+
+You can use @code{make-obsolete} to declare a function obsolete. This
+indicates that the function may be removed at some stage in the future.
+
+@defun make-obsolete obsolete-name current-name &optional when
+This function makes the byte compiler warn that the function
+@var{obsolete-name} is obsolete. If @var{current-name} is a symbol, the
+warning message says to use @var{current-name} instead of
+@var{obsolete-name}. @var{current-name} does not need to be an alias for
+@var{obsolete-name}; it can be a different function with similar
+functionality. If @var{current-name} is a string, it is the warning
+message.
+
+If provided, @var{when} should be a string indicating when the function
+was first made obsolete---for example, a date or a release number.
+@end defun
+
+You can define a function as an alias and declare it obsolete at the
+same time using the macro @code{define-obsolete-function-alias}.
+
+@defmac define-obsolete-function-alias obsolete-name current-name &optional when docstring
+This macro marks the function @var{obsolete-name} obsolete and also
+defines it as an alias for the function @var{current-name}. It is
+equivalent to the following:
+
+@example
+(defalias @var{obsolete-name} @var{current-name} @var{docstring})
+(make-obsolete @var{obsolete-name} @var{current-name} @var{when})
+@end example
+@end defmac
+
@node Inline Functions
@section Inline Functions
@cindex inline functions
following the definition, just like macros.
@node Function Safety
-@section Determining whether a function is safe to call
+@section Determining whether a Function is Safe to Call
@cindex function safety
@cindex safety of functions