Add 2012 to FSF copyright years for Emacs files (do not merge to trunk)
[bpt/emacs.git] / doc / lispref / functions.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
49f70d46 4@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
d24880de 5@c Free Software Foundation, Inc.
b8d4c8d0 6@c See the file elisp.texi for copying conditions.
6336d8c3 7@setfilename ../../info/functions
b8d4c8d0
GM
8@node Functions, Macros, Variables, Top
9@chapter Functions
10
11 A Lisp program is composed mainly of Lisp functions. This chapter
12explains what functions are, how they accept arguments, and how to
13define them.
14
15@menu
16* What Is a Function:: Lisp functions vs. primitives; terminology.
17* Lambda Expressions:: How functions are expressed as Lisp objects.
18* Function Names:: A symbol can serve as the name of a function.
19* Defining Functions:: Lisp expressions for defining functions.
20* Calling Functions:: How to use an existing function.
21* Mapping Functions:: Applying a function to each element of a list, etc.
22* Anonymous Functions:: Lambda expressions are functions with no names.
23* Function Cells:: Accessing or setting the function definition
24 of a symbol.
25* Obsolete Functions:: Declaring functions obsolete.
d24880de 26* Inline Functions:: Defining functions that the compiler will open code.
e31dfb12 27* Declaring Functions:: Telling the compiler that a function is defined.
b8d4c8d0
GM
28* Function Safety:: Determining whether a function is safe to call.
29* Related Topics:: Cross-references to specific Lisp primitives
30 that have a special bearing on how functions work.
31@end menu
32
33@node What Is a Function
34@section What Is a Function?
35
36 In a general sense, a function is a rule for carrying on a computation
37given several values called @dfn{arguments}. The result of the
38computation is called the value of the function. The computation can
39also have side effects: lasting changes in the values of variables or
40the contents of data structures.
41
42 Here are important terms for functions in Emacs Lisp and for other
43function-like objects.
44
45@table @dfn
46@item function
47@cindex function
48In Emacs Lisp, a @dfn{function} is anything that can be applied to
49arguments in a Lisp program. In some cases, we use it more
50specifically to mean a function written in Lisp. Special forms and
51macros are not functions.
52
53@item primitive
54@cindex primitive
55@cindex subr
56@cindex built-in function
57A @dfn{primitive} is a function callable from Lisp that is written in C,
58such as @code{car} or @code{append}. These functions are also called
59@dfn{built-in functions}, or @dfn{subrs}. (Special forms are also
60considered primitives.)
61
62Usually the reason we implement a function as a primitive is either
63because it is fundamental, because it provides a low-level interface
64to operating system services, or because it needs to run fast.
65Primitives can be modified or added only by changing the C sources and
66recompiling the editor. See @ref{Writing Emacs Primitives}.
67
68@item lambda expression
69A @dfn{lambda expression} is a function written in Lisp.
70These are described in the following section.
71@ifnottex
72@xref{Lambda Expressions}.
73@end ifnottex
74
75@item special form
76A @dfn{special form} is a primitive that is like a function but does not
77evaluate all of its arguments in the usual way. It may evaluate only
78some of the arguments, or may evaluate them in an unusual order, or
79several times. Many special forms are described in @ref{Control
80Structures}.
81
82@item macro
83@cindex macro
84A @dfn{macro} is a construct defined in Lisp by the programmer. It
85differs from a function in that it translates a Lisp expression that you
86write into an equivalent expression to be evaluated instead of the
87original expression. Macros enable Lisp programmers to do the sorts of
88things that special forms can do. @xref{Macros}, for how to define and
89use macros.
90
91@item command
92@cindex command
93A @dfn{command} is an object that @code{command-execute} can invoke; it
94is a possible definition for a key sequence. Some functions are
95commands; a function written in Lisp is a command if it contains an
96interactive declaration (@pxref{Defining Commands}). Such a function
97can be called from Lisp expressions like other functions; in this case,
98the fact that the function is a command makes no difference.
99
100Keyboard macros (strings and vectors) are commands also, even though
101they are not functions. A symbol is a command if its function
102definition is a command; such symbols can be invoked with @kbd{M-x}.
103The symbol is a function as well if the definition is a function.
104@xref{Interactive Call}.
105
106@item keystroke command
107@cindex keystroke command
108A @dfn{keystroke command} is a command that is bound to a key sequence
109(typically one to three keystrokes). The distinction is made here
110merely to avoid confusion with the meaning of ``command'' in non-Emacs
111editors; for Lisp programs, the distinction is normally unimportant.
112
113@item byte-code function
114A @dfn{byte-code function} is a function that has been compiled by the
115byte compiler. @xref{Byte-Code Type}.
116@end table
117
118@defun functionp object
119This function returns @code{t} if @var{object} is any kind of
9b240644
EZ
120function, i.e.@: can be passed to @code{funcall}. Note that
121@code{functionp} returns @code{nil} for special forms (@pxref{Special
122Forms}).
b8d4c8d0
GM
123@end defun
124
125Unlike @code{functionp}, the next three functions do @emph{not}
126treat a symbol as its function definition.
127
128@defun subrp object
129This function returns @code{t} if @var{object} is a built-in function
130(i.e., a Lisp primitive).
131
132@example
133@group
134(subrp 'message) ; @r{@code{message} is a symbol,}
135 @result{} nil ; @r{not a subr object.}
136@end group
137@group
138(subrp (symbol-function 'message))
139 @result{} t
140@end group
141@end example
142@end defun
143
144@defun byte-code-function-p object
145This function returns @code{t} if @var{object} is a byte-code
146function. For example:
147
148@example
149@group
150(byte-code-function-p (symbol-function 'next-line))
151 @result{} t
152@end group
153@end example
154@end defun
155
156@defun subr-arity subr
157This function provides information about the argument list of a
158primitive, @var{subr}. The returned value is a pair
159@code{(@var{min} . @var{max})}. @var{min} is the minimum number of
160args. @var{max} is the maximum number or the symbol @code{many}, for a
161function with @code{&rest} arguments, or the symbol @code{unevalled} if
162@var{subr} is a special form.
163@end defun
164
165@node Lambda Expressions
166@section Lambda Expressions
167@cindex lambda expression
168
169 A function written in Lisp is a list that looks like this:
170
171@example
172(lambda (@var{arg-variables}@dots{})
173 @r{[}@var{documentation-string}@r{]}
174 @r{[}@var{interactive-declaration}@r{]}
175 @var{body-forms}@dots{})
176@end example
177
178@noindent
179Such a list is called a @dfn{lambda expression}. In Emacs Lisp, it
180actually is valid as an expression---it evaluates to itself. In some
181other Lisp dialects, a lambda expression is not a valid expression at
182all. In either case, its main use is not to be evaluated as an
183expression, but to be called as a function.
184
185@menu
186* Lambda Components:: The parts of a lambda expression.
187* Simple Lambda:: A simple example.
188* Argument List:: Details and special features of argument lists.
189* Function Documentation:: How to put documentation in a function.
190@end menu
191
192@node Lambda Components
193@subsection Components of a Lambda Expression
194
195@ifnottex
196
197 A function written in Lisp (a ``lambda expression'') is a list that
198looks like this:
199
200@example
201(lambda (@var{arg-variables}@dots{})
202 [@var{documentation-string}]
203 [@var{interactive-declaration}]
204 @var{body-forms}@dots{})
205@end example
206@end ifnottex
207
208@cindex lambda list
209 The first element of a lambda expression is always the symbol
210@code{lambda}. This indicates that the list represents a function. The
211reason functions are defined to start with @code{lambda} is so that
212other lists, intended for other uses, will not accidentally be valid as
213functions.
214
215 The second element is a list of symbols---the argument variable names.
216This is called the @dfn{lambda list}. When a Lisp function is called,
217the argument values are matched up against the variables in the lambda
218list, which are given local bindings with the values provided.
219@xref{Local Variables}.
220
221 The documentation string is a Lisp string object placed within the
222function definition to describe the function for the Emacs help
223facilities. @xref{Function Documentation}.
224
225 The interactive declaration is a list of the form @code{(interactive
226@var{code-string})}. This declares how to provide arguments if the
227function is used interactively. Functions with this declaration are called
228@dfn{commands}; they can be called using @kbd{M-x} or bound to a key.
229Functions not intended to be called in this way should not have interactive
230declarations. @xref{Defining Commands}, for how to write an interactive
231declaration.
232
233@cindex body of function
234 The rest of the elements are the @dfn{body} of the function: the Lisp
235code to do the work of the function (or, as a Lisp programmer would say,
236``a list of Lisp forms to evaluate''). The value returned by the
237function is the value returned by the last element of the body.
238
239@node Simple Lambda
240@subsection A Simple Lambda-Expression Example
241
242 Consider for example the following function:
243
244@example
245(lambda (a b c) (+ a b c))
246@end example
247
248@noindent
249We can call this function by writing it as the @sc{car} of an
250expression, like this:
251
252@example
253@group
254((lambda (a b c) (+ a b c))
255 1 2 3)
256@end group
257@end example
258
259@noindent
260This call evaluates the body of the lambda expression with the variable
261@code{a} bound to 1, @code{b} bound to 2, and @code{c} bound to 3.
262Evaluation of the body adds these three numbers, producing the result 6;
263therefore, this call to the function returns the value 6.
264
265 Note that the arguments can be the results of other function calls, as in
266this example:
267
268@example
269@group
270((lambda (a b c) (+ a b c))
271 1 (* 2 3) (- 5 4))
272@end group
273@end example
274
275@noindent
276This evaluates the arguments @code{1}, @code{(* 2 3)}, and @code{(- 5
2774)} from left to right. Then it applies the lambda expression to the
278argument values 1, 6 and 1 to produce the value 8.
279
280 It is not often useful to write a lambda expression as the @sc{car} of
281a form in this way. You can get the same result, of making local
282variables and giving them values, using the special form @code{let}
283(@pxref{Local Variables}). And @code{let} is clearer and easier to use.
284In practice, lambda expressions are either stored as the function
285definitions of symbols, to produce named functions, or passed as
286arguments to other functions (@pxref{Anonymous Functions}).
287
288 However, calls to explicit lambda expressions were very useful in the
289old days of Lisp, before the special form @code{let} was invented. At
290that time, they were the only way to bind and initialize local
291variables.
292
293@node Argument List
294@subsection Other Features of Argument Lists
295@kindex wrong-number-of-arguments
296@cindex argument binding
297@cindex binding arguments
298@cindex argument lists, features
299
300 Our simple sample function, @code{(lambda (a b c) (+ a b c))},
301specifies three argument variables, so it must be called with three
302arguments: if you try to call it with only two arguments or four
303arguments, you get a @code{wrong-number-of-arguments} error.
304
305 It is often convenient to write a function that allows certain
306arguments to be omitted. For example, the function @code{substring}
307accepts three arguments---a string, the start index and the end
308index---but the third argument defaults to the @var{length} of the
309string if you omit it. It is also convenient for certain functions to
310accept an indefinite number of arguments, as the functions @code{list}
311and @code{+} do.
312
313@cindex optional arguments
314@cindex rest arguments
315@kindex &optional
316@kindex &rest
317 To specify optional arguments that may be omitted when a function
318is called, simply include the keyword @code{&optional} before the optional
319arguments. To specify a list of zero or more extra arguments, include the
320keyword @code{&rest} before one final argument.
321
322 Thus, the complete syntax for an argument list is as follows:
323
324@example
325@group
326(@var{required-vars}@dots{}
327 @r{[}&optional @var{optional-vars}@dots{}@r{]}
328 @r{[}&rest @var{rest-var}@r{]})
329@end group
330@end example
331
332@noindent
333The square brackets indicate that the @code{&optional} and @code{&rest}
334clauses, and the variables that follow them, are optional.
335
336 A call to the function requires one actual argument for each of the
337@var{required-vars}. There may be actual arguments for zero or more of
338the @var{optional-vars}, and there cannot be any actual arguments beyond
339that unless the lambda list uses @code{&rest}. In that case, there may
340be any number of extra actual arguments.
341
342 If actual arguments for the optional and rest variables are omitted,
343then they always default to @code{nil}. There is no way for the
344function to distinguish between an explicit argument of @code{nil} and
345an omitted argument. However, the body of the function is free to
346consider @code{nil} an abbreviation for some other meaningful value.
347This is what @code{substring} does; @code{nil} as the third argument to
348@code{substring} means to use the length of the string supplied.
349
350@cindex CL note---default optional arg
351@quotation
352@b{Common Lisp note:} Common Lisp allows the function to specify what
353default value to use when an optional argument is omitted; Emacs Lisp
354always uses @code{nil}. Emacs Lisp does not support ``supplied-p''
355variables that tell you whether an argument was explicitly passed.
356@end quotation
357
358 For example, an argument list that looks like this:
359
360@example
361(a b &optional c d &rest e)
362@end example
363
364@noindent
365binds @code{a} and @code{b} to the first two actual arguments, which are
366required. If one or two more arguments are provided, @code{c} and
367@code{d} are bound to them respectively; any arguments after the first
368four are collected into a list and @code{e} is bound to that list. If
369there are only two arguments, @code{c} is @code{nil}; if two or three
370arguments, @code{d} is @code{nil}; if four arguments or fewer, @code{e}
371is @code{nil}.
372
373 There is no way to have required arguments following optional
374ones---it would not make sense. To see why this must be so, suppose
375that @code{c} in the example were optional and @code{d} were required.
376Suppose three actual arguments are given; which variable would the
377third argument be for? Would it be used for the @var{c}, or for
378@var{d}? One can argue for both possibilities. Similarly, it makes
379no sense to have any more arguments (either required or optional)
380after a @code{&rest} argument.
381
382 Here are some examples of argument lists and proper calls:
383
384@smallexample
385((lambda (n) (1+ n)) ; @r{One required:}
386 1) ; @r{requires exactly one argument.}
387 @result{} 2
388((lambda (n &optional n1) ; @r{One required and one optional:}
389 (if n1 (+ n n1) (1+ n))) ; @r{1 or 2 arguments.}
390 1 2)
391 @result{} 3
392((lambda (n &rest ns) ; @r{One required and one rest:}
393 (+ n (apply '+ ns))) ; @r{1 or more arguments.}
394 1 2 3 4 5)
395 @result{} 15
396@end smallexample
397
398@node Function Documentation
399@subsection Documentation Strings of Functions
400@cindex documentation of function
401
402 A lambda expression may optionally have a @dfn{documentation string} just
403after the lambda list. This string does not affect execution of the
404function; it is a kind of comment, but a systematized comment which
405actually appears inside the Lisp world and can be used by the Emacs help
406facilities. @xref{Documentation}, for how the @var{documentation-string} is
407accessed.
408
409 It is a good idea to provide documentation strings for all the
410functions in your program, even those that are called only from within
411your program. Documentation strings are like comments, except that they
412are easier to access.
413
414 The first line of the documentation string should stand on its own,
415because @code{apropos} displays just this first line. It should consist
416of one or two complete sentences that summarize the function's purpose.
417
418 The start of the documentation string is usually indented in the
419source file, but since these spaces come before the starting
420double-quote, they are not part of the string. Some people make a
421practice of indenting any additional lines of the string so that the
422text lines up in the program source. @emph{That is a mistake.} The
423indentation of the following lines is inside the string; what looks
424nice in the source code will look ugly when displayed by the help
425commands.
426
427 You may wonder how the documentation string could be optional, since
428there are required components of the function that follow it (the body).
429Since evaluation of a string returns that string, without any side effects,
430it has no effect if it is not the last form in the body. Thus, in
431practice, there is no confusion between the first form of the body and the
432documentation string; if the only body form is a string then it serves both
433as the return value and as the documentation.
434
435 The last line of the documentation string can specify calling
436conventions different from the actual function arguments. Write
437text like this:
438
439@example
440\(fn @var{arglist})
441@end example
442
443@noindent
444following a blank line, at the beginning of the line, with no newline
445following it inside the documentation string. (The @samp{\} is used
446to avoid confusing the Emacs motion commands.) The calling convention
447specified in this way appears in help messages in place of the one
448derived from the actual arguments of the function.
449
450 This feature is particularly useful for macro definitions, since the
451arguments written in a macro definition often do not correspond to the
452way users think of the parts of the macro call.
453
454@node Function Names
455@section Naming a Function
456@cindex function definition
457@cindex named function
458@cindex function name
459
460 In most computer languages, every function has a name; the idea of a
461function without a name is nonsensical. In Lisp, a function in the
462strictest sense has no name. It is simply a list whose first element is
463@code{lambda}, a byte-code function object, or a primitive subr-object.
464
465 However, a symbol can serve as the name of a function. This happens
466when you put the function in the symbol's @dfn{function cell}
467(@pxref{Symbol Components}). Then the symbol itself becomes a valid,
468callable function, equivalent to the list or subr-object that its
469function cell refers to. The contents of the function cell are also
470called the symbol's @dfn{function definition}. The procedure of using a
471symbol's function definition in place of the symbol is called
472@dfn{symbol function indirection}; see @ref{Function Indirection}.
473
474 In practice, nearly all functions are given names in this way and
475referred to through their names. For example, the symbol @code{car} works
476as a function and does what it does because the primitive subr-object
477@code{#<subr car>} is stored in its function cell.
478
479 We give functions names because it is convenient to refer to them by
480their names in Lisp expressions. For primitive subr-objects such as
481@code{#<subr car>}, names are the only way you can refer to them: there
482is no read syntax for such objects. For functions written in Lisp, the
483name is more convenient to use in a call than an explicit lambda
484expression. Also, a function with a name can refer to itself---it can
485be recursive. Writing the function's name in its own definition is much
486more convenient than making the function definition point to itself
487(something that is not impossible but that has various disadvantages in
488practice).
489
490 We often identify functions with the symbols used to name them. For
491example, we often speak of ``the function @code{car},'' not
492distinguishing between the symbol @code{car} and the primitive
493subr-object that is its function definition. For most purposes, the
494distinction is not important.
495
496 Even so, keep in mind that a function need not have a unique name. While
497a given function object @emph{usually} appears in the function cell of only
498one symbol, this is just a matter of convenience. It is easy to store
499it in several symbols using @code{fset}; then each of the symbols is
500equally well a name for the same function.
501
502 A symbol used as a function name may also be used as a variable; these
503two uses of a symbol are independent and do not conflict. (Some Lisp
504dialects, such as Scheme, do not distinguish between a symbol's value
505and its function definition; a symbol's value as a variable is also its
506function definition.) If you have not given a symbol a function
507definition, you cannot use it as a function; whether the symbol has a
508value as a variable makes no difference to this.
509
510@node Defining Functions
511@section Defining Functions
512@cindex defining a function
513
514 We usually give a name to a function when it is first created. This
515is called @dfn{defining a function}, and it is done with the
516@code{defun} special form.
517
518@defspec defun name argument-list body-forms
519@code{defun} is the usual way to define new Lisp functions. It
520defines the symbol @var{name} as a function that looks like this:
521
522@example
523(lambda @var{argument-list} . @var{body-forms})
524@end example
525
526@code{defun} stores this lambda expression in the function cell of
527@var{name}. It returns the value @var{name}, but usually we ignore this
528value.
529
530As described previously, @var{argument-list} is a list of argument
531names and may include the keywords @code{&optional} and @code{&rest}
532(@pxref{Lambda Expressions}). Also, the first two of the
533@var{body-forms} may be a documentation string and an interactive
534declaration.
535
536There is no conflict if the same symbol @var{name} is also used as a
537variable, since the symbol's value cell is independent of the function
538cell. @xref{Symbol Components}.
539
540Here are some examples:
541
542@example
543@group
544(defun foo () 5)
545 @result{} foo
546@end group
547@group
548(foo)
549 @result{} 5
550@end group
551
552@group
553(defun bar (a &optional b &rest c)
554 (list a b c))
555 @result{} bar
556@end group
557@group
558(bar 1 2 3 4 5)
559 @result{} (1 2 (3 4 5))
560@end group
561@group
562(bar 1)
563 @result{} (1 nil nil)
564@end group
565@group
566(bar)
567@error{} Wrong number of arguments.
568@end group
569
570@group
571(defun capitalize-backwards ()
572 "Upcase the last letter of a word."
573 (interactive)
574 (backward-word 1)
575 (forward-word 1)
576 (backward-char 1)
577 (capitalize-word 1))
578 @result{} capitalize-backwards
579@end group
580@end example
581
582Be careful not to redefine existing functions unintentionally.
583@code{defun} redefines even primitive functions such as @code{car}
584without any hesitation or notification. Redefining a function already
585defined is often done deliberately, and there is no way to distinguish
586deliberate redefinition from unintentional redefinition.
587@end defspec
588
589@cindex function aliases
590@defun defalias name definition &optional docstring
591@anchor{Definition of defalias}
592This special form defines the symbol @var{name} as a function, with
593definition @var{definition} (which can be any valid Lisp function).
594It returns @var{definition}.
595
596If @var{docstring} is non-@code{nil}, it becomes the function
597documentation of @var{name}. Otherwise, any documentation provided by
598@var{definition} is used.
599
600The proper place to use @code{defalias} is where a specific function
601name is being defined---especially where that name appears explicitly in
602the source file being loaded. This is because @code{defalias} records
603which file defined the function, just like @code{defun}
604(@pxref{Unloading}).
605
606By contrast, in programs that manipulate function definitions for other
607purposes, it is better to use @code{fset}, which does not keep such
608records. @xref{Function Cells}.
609@end defun
610
611 You cannot create a new primitive function with @code{defun} or
612@code{defalias}, but you can use them to change the function definition of
613any symbol, even one such as @code{car} or @code{x-popup-menu} whose
614normal definition is a primitive. However, this is risky: for
615instance, it is next to impossible to redefine @code{car} without
616breaking Lisp completely. Redefining an obscure function such as
617@code{x-popup-menu} is less dangerous, but it still may not work as
618you expect. If there are calls to the primitive from C code, they
619call the primitive's C definition directly, so changing the symbol's
620definition will have no effect on them.
621
622 See also @code{defsubst}, which defines a function like @code{defun}
623and tells the Lisp compiler to open-code it. @xref{Inline Functions}.
624
625@node Calling Functions
626@section Calling Functions
627@cindex function invocation
628@cindex calling a function
629
630 Defining functions is only half the battle. Functions don't do
631anything until you @dfn{call} them, i.e., tell them to run. Calling a
632function is also known as @dfn{invocation}.
633
634 The most common way of invoking a function is by evaluating a list.
635For example, evaluating the list @code{(concat "a" "b")} calls the
636function @code{concat} with arguments @code{"a"} and @code{"b"}.
637@xref{Evaluation}, for a description of evaluation.
638
639 When you write a list as an expression in your program, you specify
640which function to call, and how many arguments to give it, in the text
641of the program. Usually that's just what you want. Occasionally you
642need to compute at run time which function to call. To do that, use
643the function @code{funcall}. When you also need to determine at run
644time how many arguments to pass, use @code{apply}.
645
646@defun funcall function &rest arguments
647@code{funcall} calls @var{function} with @var{arguments}, and returns
648whatever @var{function} returns.
649
650Since @code{funcall} is a function, all of its arguments, including
651@var{function}, are evaluated before @code{funcall} is called. This
652means that you can use any expression to obtain the function to be
653called. It also means that @code{funcall} does not see the
654expressions you write for the @var{arguments}, only their values.
655These values are @emph{not} evaluated a second time in the act of
656calling @var{function}; the operation of @code{funcall} is like the
657normal procedure for calling a function, once its arguments have
658already been evaluated.
659
660The argument @var{function} must be either a Lisp function or a
661primitive function. Special forms and macros are not allowed, because
662they make sense only when given the ``unevaluated'' argument
663expressions. @code{funcall} cannot provide these because, as we saw
664above, it never knows them in the first place.
665
666@example
667@group
668(setq f 'list)
669 @result{} list
670@end group
671@group
672(funcall f 'x 'y 'z)
673 @result{} (x y z)
674@end group
675@group
676(funcall f 'x 'y '(z))
677 @result{} (x y (z))
678@end group
679@group
680(funcall 'and t nil)
681@error{} Invalid function: #<subr and>
682@end group
683@end example
684
685Compare these examples with the examples of @code{apply}.
686@end defun
687
688@defun apply function &rest arguments
689@code{apply} calls @var{function} with @var{arguments}, just like
690@code{funcall} but with one difference: the last of @var{arguments} is a
691list of objects, which are passed to @var{function} as separate
692arguments, rather than a single list. We say that @code{apply}
693@dfn{spreads} this list so that each individual element becomes an
694argument.
695
696@code{apply} returns the result of calling @var{function}. As with
697@code{funcall}, @var{function} must either be a Lisp function or a
698primitive function; special forms and macros do not make sense in
699@code{apply}.
700
701@example
702@group
703(setq f 'list)
704 @result{} list
705@end group
706@group
707(apply f 'x 'y 'z)
708@error{} Wrong type argument: listp, z
709@end group
710@group
711(apply '+ 1 2 '(3 4))
712 @result{} 10
713@end group
714@group
715(apply '+ '(1 2 3 4))
716 @result{} 10
717@end group
718
719@group
720(apply 'append '((a b c) nil (x y z) nil))
721 @result{} (a b c x y z)
722@end group
723@end example
724
725For an interesting example of using @code{apply}, see @ref{Definition
726of mapcar}.
727@end defun
728
80f85d7c
EZ
729@cindex partial application of functions
730@cindex currying
a18a6d49 731 Sometimes it is useful to fix some of the function's arguments at
80f85d7c
EZ
732certain values, and leave the rest of arguments for when the function
733is actually called. The act of fixing some of the function's
734arguments is called @dfn{partial application} of the function@footnote{
735This is related to, but different from @dfn{currying}, which
736transforms a function that takes multiple arguments in such a way that
737it can be called as a chain of functions, each one with a single
738argument.}.
739The result is a new function that accepts the rest of
740arguments and calls the original function with all the arguments
a18a6d49
EZ
741combined.
742
743 Here's how to do partial application in Emacs Lisp:
80f85d7c
EZ
744
745@defun apply-partially func &rest args
746This function returns a new function which, when called, will call
747@var{func} with the list of arguments composed from @var{args} and
748additional arguments specified at the time of the call. If @var{func}
749accepts @var{n} arguments, then a call to @code{apply-partially} with
750@w{@code{@var{m} < @var{n}}} arguments will produce a new function of
751@w{@code{@var{n} - @var{m}}} arguments.
752
834b5485
EZ
753Here's how we could define the built-in function @code{1+}, if it
754didn't exist, using @code{apply-partially} and @code{+}, another
755built-in function:
80f85d7c
EZ
756
757@example
80f85d7c 758@group
834b5485
EZ
759(defalias '1+ (apply-partially '+ 1)
760 "Increment argument by one.")
761@end group
762@group
763(1+ 10)
80f85d7c
EZ
764 @result{} 11
765@end group
766@end example
767@end defun
768
b8d4c8d0
GM
769@cindex functionals
770 It is common for Lisp functions to accept functions as arguments or
771find them in data structures (especially in hook variables and property
772lists) and call them using @code{funcall} or @code{apply}. Functions
773that accept function arguments are often called @dfn{functionals}.
774
775 Sometimes, when you call a functional, it is useful to supply a no-op
776function as the argument. Here are two different kinds of no-op
777function:
778
779@defun identity arg
780This function returns @var{arg} and has no side effects.
781@end defun
782
783@defun ignore &rest args
784This function ignores any arguments and returns @code{nil}.
785@end defun
786
787@node Mapping Functions
788@section Mapping Functions
789@cindex mapping functions
790
791 A @dfn{mapping function} applies a given function (@emph{not} a
792special form or macro) to each element of a list or other collection.
793Emacs Lisp has several such functions; @code{mapcar} and
794@code{mapconcat}, which scan a list, are described here.
795@xref{Definition of mapatoms}, for the function @code{mapatoms} which
796maps over the symbols in an obarray. @xref{Definition of maphash},
797for the function @code{maphash} which maps over key/value associations
798in a hash table.
799
800 These mapping functions do not allow char-tables because a char-table
801is a sparse array whose nominal range of indices is very large. To map
802over a char-table in a way that deals properly with its sparse nature,
803use the function @code{map-char-table} (@pxref{Char-Tables}).
804
805@defun mapcar function sequence
806@anchor{Definition of mapcar}
807@code{mapcar} applies @var{function} to each element of @var{sequence}
808in turn, and returns a list of the results.
809
810The argument @var{sequence} can be any kind of sequence except a
811char-table; that is, a list, a vector, a bool-vector, or a string. The
812result is always a list. The length of the result is the same as the
813length of @var{sequence}. For example:
814
815@smallexample
816@group
817(mapcar 'car '((a b) (c d) (e f)))
818 @result{} (a c e)
819(mapcar '1+ [1 2 3])
820 @result{} (2 3 4)
3e99b825 821(mapcar 'string "abc")
b8d4c8d0
GM
822 @result{} ("a" "b" "c")
823@end group
824
825@group
826;; @r{Call each function in @code{my-hooks}.}
827(mapcar 'funcall my-hooks)
828@end group
829
830@group
831(defun mapcar* (function &rest args)
832 "Apply FUNCTION to successive cars of all ARGS.
833Return the list of results."
834 ;; @r{If no list is exhausted,}
835 (if (not (memq nil args))
836 ;; @r{apply function to @sc{car}s.}
837 (cons (apply function (mapcar 'car args))
838 (apply 'mapcar* function
839 ;; @r{Recurse for rest of elements.}
840 (mapcar 'cdr args)))))
841@end group
842
843@group
844(mapcar* 'cons '(a b c) '(1 2 3 4))
845 @result{} ((a . 1) (b . 2) (c . 3))
846@end group
847@end smallexample
848@end defun
849
850@defun mapc function sequence
851@code{mapc} is like @code{mapcar} except that @var{function} is used for
852side-effects only---the values it returns are ignored, not collected
853into a list. @code{mapc} always returns @var{sequence}.
854@end defun
855
856@defun mapconcat function sequence separator
857@code{mapconcat} applies @var{function} to each element of
858@var{sequence}: the results, which must be strings, are concatenated.
859Between each pair of result strings, @code{mapconcat} inserts the string
860@var{separator}. Usually @var{separator} contains a space or comma or
861other suitable punctuation.
862
863The argument @var{function} must be a function that can take one
864argument and return a string. The argument @var{sequence} can be any
865kind of sequence except a char-table; that is, a list, a vector, a
866bool-vector, or a string.
867
868@smallexample
869@group
870(mapconcat 'symbol-name
871 '(The cat in the hat)
872 " ")
873 @result{} "The cat in the hat"
874@end group
875
876@group
877(mapconcat (function (lambda (x) (format "%c" (1+ x))))
878 "HAL-8000"
879 "")
880 @result{} "IBM.9111"
881@end group
882@end smallexample
883@end defun
884
885@node Anonymous Functions
886@section Anonymous Functions
887@cindex anonymous function
888
889 In Lisp, a function is a list that starts with @code{lambda}, a
890byte-code function compiled from such a list, or alternatively a
5d6ab672
CY
891primitive subr-object; names are ``extra.'' Although functions are
892usually defined with @code{defun} and given names at the same time, it
893is occasionally more concise to use an explicit lambda expression---an
b8d4c8d0
GM
894anonymous function. Such a list is valid wherever a function name is.
895
896 Any method of creating such a list makes a valid function. Even this:
897
898@smallexample
899@group
900(setq silly (append '(lambda (x)) (list (list '+ (* 3 4) 'x))))
901@result{} (lambda (x) (+ 12 x))
902@end group
903@end smallexample
904
905@noindent
906This computes a list that looks like @code{(lambda (x) (+ 12 x))} and
907makes it the value (@emph{not} the function definition!) of
908@code{silly}.
909
910 Here is how we might call this function:
911
912@example
913@group
914(funcall silly 1)
915@result{} 13
916@end group
917@end example
918
919@noindent
5d6ab672
CY
920It does @emph{not} work to write @code{(silly 1)}, because this
921function is not the @emph{function definition} of @code{silly}. We
922have not given @code{silly} any function definition, just a value as a
923variable.
b8d4c8d0
GM
924
925 Most of the time, anonymous functions are constants that appear in
5d6ab672
CY
926your program. For instance, you might want to pass one as an argument
927to the function @code{mapcar}, which applies any given function to
928each element of a list (@pxref{Mapping Functions}).
929@xref{describe-symbols example}, for a realistic example of this.
b8d4c8d0 930
5d6ab672
CY
931 In the following example, we define a @code{change-property}
932function that takes a function as its third argument, followed by a
933@code{double-property} function that makes use of
934@code{change-property} by passing it an anonymous function:
b8d4c8d0
GM
935
936@example
937@group
938(defun change-property (symbol prop function)
939 (let ((value (get symbol prop)))
940 (put symbol prop (funcall function value))))
941@end group
b8d4c8d0 942
b8d4c8d0
GM
943@group
944(defun double-property (symbol prop)
5d6ab672 945 (change-property symbol prop (lambda (x) (* 2 x))))
b8d4c8d0
GM
946@end group
947@end example
948
b8d4c8d0 949@noindent
5d6ab672
CY
950In the @code{double-property} function, we did not quote the
951@code{lambda} form. This is permissible, because a @code{lambda} form
952is @dfn{self-quoting}: evaluating the form yields the form itself.
b8d4c8d0 953
5d6ab672
CY
954Whether or not you quote a @code{lambda} form makes a difference if
955you compile the code (@pxref{Byte Compilation}). If the @code{lambda}
956form is unquoted, as in the above example, the anonymous function is
957also compiled. Suppose, however, that we quoted the @code{lambda}
958form:
b8d4c8d0
GM
959
960@example
961@group
962(defun double-property (symbol prop)
5d6ab672 963 (change-property symbol prop '(lambda (x) (* 2 x))))
b8d4c8d0
GM
964@end group
965@end example
966
967@noindent
5d6ab672
CY
968If you compile this, the argument passed to @code{change-property} is
969the precise list shown:
b8d4c8d0
GM
970
971@example
5d6ab672 972(lambda (x) (* x 2))
b8d4c8d0
GM
973@end example
974
975@noindent
5d6ab672
CY
976The Lisp compiler cannot assume this list is a function, even though
977it looks like one, since it does not know what @code{change-property}
978will do with the list. Perhaps it will check whether the @sc{car} of
979the third element is the symbol @code{*}!
b8d4c8d0 980
5d6ab672
CY
981@findex function
982The @code{function} special form explicitly tells the byte-compiler
983that its argument is a function:
b8d4c8d0
GM
984
985@defspec function function-object
986@cindex function quoting
987This special form returns @var{function-object} without evaluating it.
988In this, it is equivalent to @code{quote}. However, it serves as a
989note to the Emacs Lisp compiler that @var{function-object} is intended
990to be used only as a function, and therefore can safely be compiled.
991Contrast this with @code{quote}, in @ref{Quoting}.
992@end defspec
993
5d6ab672
CY
994@cindex @samp{#'} syntax
995The read syntax @code{#'} is a short-hand for using @code{function}.
996Generally, it is not necessary to use either @code{#'} or
997@code{function}; just use an unquoted @code{lambda} form instead.
998(Actually, @code{lambda} is a macro defined using @code{function}.)
999The following forms are all equivalent:
1000
1001@example
1002#'(lambda (x) (* x x))
1003(function (lambda (x) (* x x)))
1004(lambda (x) (* x x))
1005@end example
1006
1007 We sometimes write @code{function} instead of @code{quote} when
1008quoting the name of a function, but this usage is just a sort of
1009comment:
1010
1011@example
1012(function @var{symbol}) @equiv{} (quote @var{symbol}) @equiv{} '@var{symbol}
1013@end example
b8d4c8d0
GM
1014
1015@node Function Cells
1016@section Accessing Function Cell Contents
1017
1018 The @dfn{function definition} of a symbol is the object stored in the
1019function cell of the symbol. The functions described here access, test,
1020and set the function cell of symbols.
1021
1022 See also the function @code{indirect-function}. @xref{Definition of
1023indirect-function}.
1024
1025@defun symbol-function symbol
1026@kindex void-function
1027This returns the object in the function cell of @var{symbol}. If the
1028symbol's function cell is void, a @code{void-function} error is
1029signaled.
1030
1031This function does not check that the returned object is a legitimate
1032function.
1033
1034@example
1035@group
1036(defun bar (n) (+ n 2))
1037 @result{} bar
1038@end group
1039@group
1040(symbol-function 'bar)
1041 @result{} (lambda (n) (+ n 2))
1042@end group
1043@group
1044(fset 'baz 'bar)
1045 @result{} bar
1046@end group
1047@group
1048(symbol-function 'baz)
1049 @result{} bar
1050@end group
1051@end example
1052@end defun
1053
1054@cindex void function cell
1055 If you have never given a symbol any function definition, we say that
1056that symbol's function cell is @dfn{void}. In other words, the function
1057cell does not have any Lisp object in it. If you try to call such a symbol
1058as a function, it signals a @code{void-function} error.
1059
1060 Note that void is not the same as @code{nil} or the symbol
1061@code{void}. The symbols @code{nil} and @code{void} are Lisp objects,
1062and can be stored into a function cell just as any other object can be
1063(and they can be valid functions if you define them in turn with
1064@code{defun}). A void function cell contains no object whatsoever.
1065
1066 You can test the voidness of a symbol's function definition with
1067@code{fboundp}. After you have given a symbol a function definition, you
1068can make it void once more using @code{fmakunbound}.
1069
1070@defun fboundp symbol
1071This function returns @code{t} if the symbol has an object in its
1072function cell, @code{nil} otherwise. It does not check that the object
1073is a legitimate function.
1074@end defun
1075
1076@defun fmakunbound symbol
1077This function makes @var{symbol}'s function cell void, so that a
1078subsequent attempt to access this cell will cause a
1079@code{void-function} error. It returns @var{symbol}. (See also
1080@code{makunbound}, in @ref{Void Variables}.)
1081
1082@example
1083@group
1084(defun foo (x) x)
1085 @result{} foo
1086@end group
1087@group
1088(foo 1)
1089 @result{}1
1090@end group
1091@group
1092(fmakunbound 'foo)
1093 @result{} foo
1094@end group
1095@group
1096(foo 1)
1097@error{} Symbol's function definition is void: foo
1098@end group
1099@end example
1100@end defun
1101
1102@defun fset symbol definition
1103This function stores @var{definition} in the function cell of
1104@var{symbol}. The result is @var{definition}. Normally
1105@var{definition} should be a function or the name of a function, but
1106this is not checked. The argument @var{symbol} is an ordinary evaluated
1107argument.
1108
1109There are three normal uses of this function:
1110
1111@itemize @bullet
1112@item
1113Copying one symbol's function definition to another---in other words,
1114making an alternate name for a function. (If you think of this as the
1115definition of the new name, you should use @code{defalias} instead of
1116@code{fset}; see @ref{Definition of defalias}.)
1117
1118@item
1119Giving a symbol a function definition that is not a list and therefore
1120cannot be made with @code{defun}. For example, you can use @code{fset}
1121to give a symbol @code{s1} a function definition which is another symbol
1122@code{s2}; then @code{s1} serves as an alias for whatever definition
1123@code{s2} presently has. (Once again use @code{defalias} instead of
1124@code{fset} if you think of this as the definition of @code{s1}.)
1125
1126@item
1127In constructs for defining or altering functions. If @code{defun}
1128were not a primitive, it could be written in Lisp (as a macro) using
1129@code{fset}.
1130@end itemize
1131
1132Here are examples of these uses:
1133
1134@example
1135@group
1136;; @r{Save @code{foo}'s definition in @code{old-foo}.}
1137(fset 'old-foo (symbol-function 'foo))
1138@end group
1139
1140@group
1141;; @r{Make the symbol @code{car} the function definition of @code{xfirst}.}
1142;; @r{(Most likely, @code{defalias} would be better than @code{fset} here.)}
1143(fset 'xfirst 'car)
1144 @result{} car
1145@end group
1146@group
1147(xfirst '(1 2 3))
1148 @result{} 1
1149@end group
1150@group
1151(symbol-function 'xfirst)
1152 @result{} car
1153@end group
1154@group
1155(symbol-function (symbol-function 'xfirst))
1156 @result{} #<subr car>
1157@end group
1158
1159@group
1160;; @r{Define a named keyboard macro.}
1161(fset 'kill-two-lines "\^u2\^k")
1162 @result{} "\^u2\^k"
1163@end group
1164
1165@group
1166;; @r{Here is a function that alters other functions.}
1167(defun copy-function-definition (new old)
1168 "Define NEW with the same function definition as OLD."
1169 (fset new (symbol-function old)))
1170@end group
1171@end example
1172@end defun
1173
1174 @code{fset} is sometimes used to save the old definition of a
1175function before redefining it. That permits the new definition to
1176invoke the old definition. But it is unmodular and unclean for a Lisp
1177file to redefine a function defined elsewhere. If you want to modify
1178a function defined by another package, it is cleaner to use
1179@code{defadvice} (@pxref{Advising Functions}).
1180
1181@node Obsolete Functions
1182@section Declaring Functions Obsolete
1183
1184You can use @code{make-obsolete} to declare a function obsolete. This
1185indicates that the function may be removed at some stage in the future.
1186
1187@defun make-obsolete obsolete-name current-name &optional when
1188This function makes the byte compiler warn that the function
1189@var{obsolete-name} is obsolete. If @var{current-name} is a symbol, the
1190warning message says to use @var{current-name} instead of
1191@var{obsolete-name}. @var{current-name} does not need to be an alias for
1192@var{obsolete-name}; it can be a different function with similar
1193functionality. If @var{current-name} is a string, it is the warning
1194message.
1195
1196If provided, @var{when} should be a string indicating when the function
1197was first made obsolete---for example, a date or a release number.
1198@end defun
1199
1200You can define a function as an alias and declare it obsolete at the
eb5ed549 1201same time using the macro @code{define-obsolete-function-alias}:
b8d4c8d0
GM
1202
1203@defmac define-obsolete-function-alias obsolete-name current-name &optional when docstring
1204This macro marks the function @var{obsolete-name} obsolete and also
1205defines it as an alias for the function @var{current-name}. It is
1206equivalent to the following:
1207
1208@example
1209(defalias @var{obsolete-name} @var{current-name} @var{docstring})
1210(make-obsolete @var{obsolete-name} @var{current-name} @var{when})
1211@end example
1212@end defmac
1213
eb5ed549
CY
1214In addition, you can mark a certain a particular calling convention
1215for a function as obsolete:
1216
1217@defun set-advertised-calling-convention function signature
1218This function specifies the argument list @var{signature} as the
1219correct way to call @var{function}. This causes the Emacs byte
1220compiler to issue a warning whenever it comes across an Emacs Lisp
1221program that calls @var{function} any other way (however, it will
1222still allow the code to be byte compiled).
1223
1224For instance, in old versions of Emacs the @code{sit-for} function
1225accepted three arguments, like this
1226
1227@smallexample
1228 (sit-for seconds milliseconds nodisp)
1229@end smallexample
1230
1231However, calling @code{sit-for} this way is considered obsolete
1232(@pxref{Waiting}). The old calling convention is deprecated like
1233this:
1234
1235@smallexample
1236(set-advertised-calling-convention
1237 'sit-for '(seconds &optional nodisp))
1238@end smallexample
1239@end defun
1240
b8d4c8d0
GM
1241@node Inline Functions
1242@section Inline Functions
1243@cindex inline functions
1244
1245@findex defsubst
1246You can define an @dfn{inline function} by using @code{defsubst} instead
1247of @code{defun}. An inline function works just like an ordinary
1248function except for one thing: when you compile a call to the function,
1249the function's definition is open-coded into the caller.
1250
1251Making a function inline makes explicit calls run faster. But it also
1252has disadvantages. For one thing, it reduces flexibility; if you
1253change the definition of the function, calls already inlined still use
1254the old definition until you recompile them.
1255
1256Another disadvantage is that making a large function inline can increase
1257the size of compiled code both in files and in memory. Since the speed
1258advantage of inline functions is greatest for small functions, you
1259generally should not make large functions inline.
1260
1261Also, inline functions do not behave well with respect to debugging,
1262tracing, and advising (@pxref{Advising Functions}). Since ease of
1263debugging and the flexibility of redefining functions are important
1264features of Emacs, you should not make a function inline, even if it's
1265small, unless its speed is really crucial, and you've timed the code
1266to verify that using @code{defun} actually has performance problems.
1267
1268It's possible to define a macro to expand into the same code that an
1269inline function would execute. (@xref{Macros}.) But the macro would be
1270limited to direct use in expressions---a macro cannot be called with
1271@code{apply}, @code{mapcar} and so on. Also, it takes some work to
1272convert an ordinary function into a macro. To convert it into an inline
1273function is very easy; simply replace @code{defun} with @code{defsubst}.
1274Since each argument of an inline function is evaluated exactly once, you
1275needn't worry about how many times the body uses the arguments, as you
1276do for macros. (@xref{Argument Evaluation}.)
1277
1278Inline functions can be used and open-coded later on in the same file,
1279following the definition, just like macros.
1280
e31dfb12
GM
1281@node Declaring Functions
1282@section Telling the Compiler that a Function is Defined
1283@cindex function declaration
1284@cindex declaring functions
c4540067 1285@findex declare-function
e31dfb12 1286
a0925923
RS
1287Byte-compiling a file often produces warnings about functions that the
1288compiler doesn't know about (@pxref{Compiler Errors}). Sometimes this
1289indicates a real problem, but usually the functions in question are
1290defined in other files which would be loaded if that code is run. For
1291example, byte-compiling @file{fortran.el} used to warn:
e31dfb12 1292
a0925923 1293@smallexample
e31dfb12 1294In end of data:
bfd0fe7b
GM
1295fortran.el:2152:1:Warning: the function `gud-find-c-expr' is not known
1296 to be defined.
a0925923 1297@end smallexample
e31dfb12 1298
a0925923
RS
1299In fact, @code{gud-find-c-expr} is only used in the function that
1300Fortran mode uses for the local value of
1301@code{gud-find-expr-function}, which is a callback from GUD; if it is
1302called, the GUD functions will be loaded. When you know that such a
1303warning does not indicate a real problem, it is good to suppress the
1304warning. That makes new warnings which might mean real problems more
1305visible. You do that with @code{declare-function}.
e31dfb12
GM
1306
1307All you need to do is add a @code{declare-function} statement before the
1308first use of the function in question:
1309
a0925923 1310@smallexample
e31dfb12 1311(declare-function gud-find-c-expr "gud.el" nil)
7a6a1728 1312@end smallexample
e31dfb12
GM
1313
1314This says that @code{gud-find-c-expr} is defined in @file{gud.el} (the
a0925923
RS
1315@samp{.el} can be omitted). The compiler takes for granted that that file
1316really defines the function, and does not check.
7a6a1728 1317
a0925923
RS
1318 The optional third argument specifies the argument list of
1319@code{gud-find-c-expr}. In this case, it takes no arguments
1320(@code{nil} is different from not specifying a value). In other
1321cases, this might be something like @code{(file &optional overwrite)}.
1322You don't have to specify the argument list, but if you do the
1323byte compiler can check that the calls match the declaration.
1324
8f4b37d8 1325@defmac declare-function function file &optional arglist fileonly
a0925923 1326Tell the byte compiler to assume that @var{function} is defined, with
b0fbc500
CY
1327arguments @var{arglist}, and that the definition should come from the
1328file @var{file}. @var{fileonly} non-@code{nil} means only check that
8f4b37d8 1329@var{file} exists, not that it actually defines @var{function}.
a0925923
RS
1330@end defmac
1331
1332 To verify that these functions really are declared where
1333@code{declare-function} says they are, use @code{check-declare-file}
1334to check all @code{declare-function} calls in one source file, or use
1335@code{check-declare-directory} check all the files in and under a
1336certain directory.
1337
1338 These commands find the file that ought to contain a function's
1339definition using @code{locate-library}; if that finds no file, they
1340expand the definition file name relative to the directory of the file
1341that contains the @code{declare-function} call.
1342
3d9842c6
GM
1343 You can also say that a function is defined by C code by specifying a
1344file name ending in @samp{.c} or @samp{.m}. @code{check-declare-file}
1345looks for these files in the C source code directory. This is useful
1346only when you call a function that is defined only on certain systems.
1347Most of the primitive functions of Emacs are always defined so they will
a0925923 1348never give you a warning.
e31dfb12 1349
c4540067
GM
1350 Sometimes a file will optionally use functions from an external package.
1351If you prefix the filename in the @code{declare-function} statement with
1352@samp{ext:}, then it will be checked if it is found, otherwise skipped
1353without error.
1354
8f4b37d8
GM
1355 There are some function definitions that @samp{check-declare} does not
1356understand (e.g. @code{defstruct} and some other macros). In such cases,
6297397b
GM
1357you can pass a non-@code{nil} @var{fileonly} argument to
1358@code{declare-function}, meaning to only check that the file exists, not
1359that it actually defines the function. Note that to do this without
1360having to specify an argument list, you should set the @var{arglist}
1361argument to @code{t} (because @code{nil} means an empty argument list, as
1362opposed to an unspecified one).
8f4b37d8 1363
b8d4c8d0
GM
1364@node Function Safety
1365@section Determining whether a Function is Safe to Call
1366@cindex function safety
1367@cindex safety of functions
1368
1369Some major modes such as SES call functions that are stored in user
1370files. (@inforef{Top, ,ses}, for more information on SES.) User
1371files sometimes have poor pedigrees---you can get a spreadsheet from
1372someone you've just met, or you can get one through email from someone
1373you've never met. So it is risky to call a function whose source code
1374is stored in a user file until you have determined that it is safe.
1375
1376@defun unsafep form &optional unsafep-vars
1377Returns @code{nil} if @var{form} is a @dfn{safe} Lisp expression, or
1378returns a list that describes why it might be unsafe. The argument
1379@var{unsafep-vars} is a list of symbols known to have temporary
1380bindings at this point; it is mainly used for internal recursive
1381calls. The current buffer is an implicit argument, which provides a
1382list of buffer-local bindings.
1383@end defun
1384
1385Being quick and simple, @code{unsafep} does a very light analysis and
1386rejects many Lisp expressions that are actually safe. There are no
1387known cases where @code{unsafep} returns @code{nil} for an unsafe
1388expression. However, a ``safe'' Lisp expression can return a string
1389with a @code{display} property, containing an associated Lisp
1390expression to be executed after the string is inserted into a buffer.
1391This associated expression can be a virus. In order to be safe, you
1392must delete properties from all strings calculated by user code before
1393inserting them into buffers.
1394
1395@ignore
1396What is a safe Lisp expression? Basically, it's an expression that
1397calls only built-in functions with no side effects (or only innocuous
1398ones). Innocuous side effects include displaying messages and
1399altering non-risky buffer-local variables (but not global variables).
1400
1401@table @dfn
1402@item Safe expression
1403@itemize
1404@item
1405An atom or quoted thing.
1406@item
1407A call to a safe function (see below), if all its arguments are
1408safe expressions.
1409@item
1410One of the special forms @code{and}, @code{catch}, @code{cond},
1411@code{if}, @code{or}, @code{prog1}, @code{prog2}, @code{progn},
1412@code{while}, and @code{unwind-protect}], if all its arguments are
1413safe.
1414@item
1415A form that creates temporary bindings (@code{condition-case},
1416@code{dolist}, @code{dotimes}, @code{lambda}, @code{let}, or
1417@code{let*}), if all args are safe and the symbols to be bound are not
1418explicitly risky (see @pxref{File Local Variables}).
1419@item
1420An assignment using @code{add-to-list}, @code{setq}, @code{push}, or
1421@code{pop}, if all args are safe and the symbols to be assigned are
1422not explicitly risky and they already have temporary or buffer-local
1423bindings.
1424@item
1425One of [apply, mapc, mapcar, mapconcat] if the first argument is a
1426safe explicit lambda and the other args are safe expressions.
1427@end itemize
1428
1429@item Safe function
1430@itemize
1431@item
1432A lambda containing safe expressions.
1433@item
1434A symbol on the list @code{safe-functions}, so the user says it's safe.
1435@item
1436A symbol with a non-@code{nil} @code{side-effect-free} property.
1437@item
27610f35
RS
1438A symbol with a non-@code{nil} @code{safe-function} property. The
1439value @code{t} indicates a function that is safe but has innocuous
1440side effects. Other values will someday indicate functions with
1441classes of side effects that are not always safe.
b8d4c8d0
GM
1442@end itemize
1443
1444The @code{side-effect-free} and @code{safe-function} properties are
1445provided for built-in functions and for low-level functions and macros
1446defined in @file{subr.el}. You can assign these properties for the
1447functions you write.
1448@end table
1449@end ignore
1450
1451@node Related Topics
1452@section Other Topics Related to Functions
1453
1454 Here is a table of several functions that do things related to
1455function calling and function definitions. They are documented
1456elsewhere, but we provide cross references here.
1457
1458@table @code
1459@item apply
1460See @ref{Calling Functions}.
1461
1462@item autoload
1463See @ref{Autoload}.
1464
1465@item call-interactively
1466See @ref{Interactive Call}.
1467
39dc0d57
RS
1468@item called-interactively-p
1469See @ref{Distinguish Interactive}.
1470
b8d4c8d0
GM
1471@item commandp
1472See @ref{Interactive Call}.
1473
1474@item documentation
1475See @ref{Accessing Documentation}.
1476
1477@item eval
1478See @ref{Eval}.
1479
1480@item funcall
1481See @ref{Calling Functions}.
1482
1483@item function
1484See @ref{Anonymous Functions}.
1485
1486@item ignore
1487See @ref{Calling Functions}.
1488
1489@item indirect-function
1490See @ref{Function Indirection}.
1491
1492@item interactive
1493See @ref{Using Interactive}.
1494
1495@item interactive-p
39dc0d57 1496See @ref{Distinguish Interactive}.
b8d4c8d0
GM
1497
1498@item mapatoms
1499See @ref{Creating Symbols}.
1500
1501@item mapcar
1502See @ref{Mapping Functions}.
1503
1504@item map-char-table
1505See @ref{Char-Tables}.
1506
1507@item mapconcat
1508See @ref{Mapping Functions}.
1509
1510@item undefined
1511See @ref{Functions for Key Lookup}.
1512@end table
1513
1514@ignore
1515 arch-tag: 39100cdf-8a55-4898-acba-595db619e8e2
1516@end ignore