We usually give a name to a function when it is first created. This
is called defining a function, and it is done with the
defun
special form.
defun
is the usual way to define new Lisp functions. It
defines the symbol name as a function that looks like this:
(lambda argument-list . body-forms)
defun
stores this lambda expression in the function cell of
name. It returns the value name, but usually we ignore this
value.
As described previously (see section Lambda Expressions),
argument-list is a list of argument names and may include the
keywords &optional
and &rest
. Also, the first two of the
body-forms may be a documentation string and an interactive
declaration.
There is no conflict if the same symbol name is also used as a variable, since the symbol's value cell is independent of the function cell. See section Symbol Components.
Here are some examples:
(defun foo () 5) => foo (foo) => 5 (defun bar (a &optional b &rest c) (list a b c)) => bar (bar 1 2 3 4 5) => (1 2 (3 4 5)) (bar 1) => (1 nil nil) (bar) error--> Wrong number of arguments. (defun capitalize-backwards () "Upcase the last letter of a word." (interactive) (backward-word 1) (forward-word 1) (backward-char 1) (capitalize-word 1)) => capitalize-backwards
Be careful not to redefine existing functions unintentionally.
defun
redefines even primitive functions such as car
without any hesitation or notification. Redefining a function already
defined is often done deliberately, and there is no way to distinguish
deliberate redefinition from unintentional redefinition.
The proper place to use defalias
is where a specific function
name is being defined--especially where that name appears explicitly in
the source file being loaded. This is because defalias
records
which file defined the function, just like defun
(see section Unloading).
By contrast, in programs that manipulate function definitions for other
purposes, it is better to use fset
, which does not keep such
records.
See also defsubst
, which defines a function like defun
and tells the Lisp compiler to open-code it. See section Inline Functions.
Go to the first, previous, next, last section, table of contents.