Next: Calling Functions, Previous: Function Names, Up: Functions and Commands [Contents][Index]
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 Lambda Expressions),
argument-list is a list of argument names and may include the
keywords &optional
and &rest
. Also, the first two forms
in 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 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.
These equivalent special forms define the symbol name as a function, with definition definition (which can be any valid Lisp function).
The proper place to use define-function
or 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 define-function
and defalias
record which file
defined the function, just like defun
.
(see 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 Inline Functions.
Next: Calling Functions, Previous: Function Names, Up: Functions and Commands [Contents][Index]