GNU Emacs Lisp Reference Manual

GNU GENERAL PUBLIC LICENSE

Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  1. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

    Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

  2. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

    You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

  3. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

    1. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

    2. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

    3. If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

    These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

    Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

    In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

  4. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

    1. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

    2. Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

    3. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

    The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

    If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

  5. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

  6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

  7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

  8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

    If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

    It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

    This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

  9. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

  10. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

  11. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

    NO WARRANTY

  12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

one line to give the program's name and an idea of what it does.
Copyright (C) 19yy  name of author

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w'.  This is free software, and you are welcome
to redistribute it under certain conditions; type `show c' 
for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision'
(which makes passes at compilers) written 
by James Hacker.

signature of Ty Coon, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.

Introduction

Most of the GNU Emacs text editor is written in the programming language called Emacs Lisp. You can write new code in Emacs Lisp and install it as an extension to the editor. However, Emacs Lisp is more than a mere "extension language"; it is a full computer programming language in its own right. You can use it as you would any other programming language.

Because Emacs Lisp is designed for use in an editor, it has special features for scanning and parsing text as well as features for handling files, buffers, displays, subprocesses, and so on. Emacs Lisp is closely integrated with the editing facilities; thus, editing commands are functions that can also conveniently be called from Lisp programs, and parameters for customization are ordinary Lisp variables.

This manual describes Emacs Lisp, presuming considerable familiarity with the use of Emacs for editing. (See The GNU Emacs Manual, for this basic information.) Generally speaking, the earlier chapters describe features of Emacs Lisp that have counterparts in many programming languages, and later chapters describe features that are peculiar to Emacs Lisp or relate specifically to editing.

This is edition 2.1.

Caveats

This manual has gone through numerous drafts. It is nearly complete but not flawless. There are a few sections which are not included, either because we consider them secondary (such as most of the individual modes) or because they are yet to be written.

Because we are not able to deal with them completely, we have left out several parts intentionally. This includes most references to VMS and all information relating Sunview. (The Free Software Foundation expends no effort on support for Sunview, since we believe users should use the free X window system rather than proprietary window systems.)

The manual should be fully correct in what it does cover, and it is therefore open to criticism on anything it says--from specific examples and descriptive text, to the ordering of chapters and sections. If something is confusing, or you find that you have to look at the sources or experiment to learn something not covered in the manual, then perhaps the manual should be fixed. Please let us know.

As you use the manual, we ask that you mark pages with corrections so you can later look them up and send them in. If you think of a simple, real life example for a function or group of functions, please make an effort to write it up and send it in. Please reference any comments to the chapter name, section name, and function name, as appropriate, since page numbers and chapter and section numbers will change. Also state the number of the edition which you are criticizing.

Please mail comments and corrections to

bug-lisp-manual@prep.ai.mit.edu

 --Bil Lewis, Dan LaLiberte, Richard Stallman

Lisp History

Lisp (LISt Processing language) was first developed in the late 1950s at the Massachusetts Institute of Technology for research in artificial intelligence. The great power of the Lisp language makes it superior for other purposes as well, such as writing editing commands.

Dozens of Lisp implementations have been built over the years, each with its own idiosyncrasies. Many of them were inspired by Maclisp, which was written in the 1960's at MIT's Project MAC. Eventually the implementors of the descendents of Maclisp came together and developed a standard for Lisp systems, called Common Lisp.

GNU Emacs Lisp is largely inspired by Maclisp, and a little by Common Lisp. If you know Common Lisp, you will notice many similarities. However, many of the features of Common Lisp have been omitted or simplified in order to reduce the memory requirements of GNU Emacs. Sometimes the simplifications are so drastic that a Common Lisp user might be very confused. We will occasionally point out how GNU Emacs Lisp differs from Common Lisp. If you don't know Common Lisp, don't worry about it; this manual is self-contained.

Conventions

This section explains the notational conventions that are used in this manual. You may want to skip this section and refer back to it later.

Some Terms

Throughout this manual, the phrases "the Lisp reader" and "the Lisp printer" are used to refer to those routines in Lisp that convert textual representations of Lisp objects into actual objects, and vice versa. See section Printed Representation and Read Syntax, for more details. You, the person reading this manual, are thought of as "the programmer" and are addressed as "you". "The user" is the person who uses Lisp programs including those you write.

Examples of Lisp code appear in this font or form: (list 1 2 3). Names that represent arguments or metasyntactic variables appear in this font or form: first-number.

nil and t

In Lisp, the symbol nil is overloaded with three meanings: it is a symbol with the name `nil'; it is the logical truth value false; and it is the empty list--the list of zero elements. When used as a variable, nil always has the value nil.

As far as the Lisp reader is concerned, `()' and `nil' are identical: they stand for the same object, the symbol nil. The different ways of writing the symbol are intended entirely for human readers. After the Lisp reader has read either `()' or `nil', there is no way to determine which representation was actually written by the programmer.

In this manual, we use () when we wish to emphasize that it means the empty list, and we use nil when we wish to emphasize that it means the truth value false. That is a good convention to use in Lisp programs also.

(cons 'foo ())                ; Emphasize the empty list
(not nil)                     ; Emphasize the truth value false

In contexts where a truth value is expected, any non-nil value is considered to be true. However, t is the preferred way to represent the truth value true. When you need to choose a value which represents true, and there is no other basis for choosing, use t. The symbol t always has value t.

In Emacs Lisp, nil and t are special symbols that always evaluate to themselves. This is so that you do not need to quote them to use them as constants in a program. An attempt to change their values results in a setting-constant error. See section Accessing Variable Values.

Evaluation Notation

A Lisp expression that you can evaluate is called a form. Evaluating a form always produces a result, which is a Lisp object. In the examples in this manual, this is indicated with `=>':

(car '(1 2))
     => 1

You can read this as "(car '(1 2)) evaluates to 1".

When a form is a macro call, it expands into a new form for Lisp to evaluate. We show the result of the expansion with `==>'. We may or may not show the actual result of the evaluation of the expanded form.

(third '(a b c))
     ==> (car (cdr (cdr '(a b c))))
     => c

Sometimes to help describe one form we show another form which produces identical results. The exact equivalence of two forms is indicated with `=='.

(make-sparse-keymap) == (list 'keymap)

Printing Notation

Many of the examples in this manual print text when they are evaluated. If you execute the code from an example in a Lisp Interaction buffer (such as the buffer `*scratch*'), the printed text is inserted into the buffer. If the example is executed by other means (such as by evaluating the function eval-region), the text printed is usually displayed in the echo area. You should be aware that text displayed in the echo area is truncated to a single line.

In examples that print text, the printed text is indicated with `-|', irrespective of how the form is executed. The value returned by evaluating the form (here bar) follows on a separate line.

(progn (print 'foo) (print 'bar))
     -| foo
     -| bar
     => bar

Error Messages

Some examples cause errors to be signaled. In them, the error message (which always appears in the echo area) is shown on a line starting with `error-->'. Note that `error-->' itself does not appear in the echo area.

(+ 23 'x)
error--> Wrong type argument: integer-or-marker-p, x

Buffer Text Notation

Some examples show modifications to text in a buffer, with "before" and "after" versions of the text. In such cases, the entire contents of the buffer in question are included between two lines of dashes containing the buffer name. In addition, the location of point is shown as `-!-'. (The symbol for point, of course, is not part of the text in the buffer; it indicates the place between two characters where point is located.)

---------- Buffer: foo ----------
This is the -!-contents of foo.
---------- Buffer: foo ----------

(insert "changed ")
     => nil
---------- Buffer: foo ----------
This is the changed -!-contents of foo.
---------- Buffer: foo ----------

Format of Descriptions

Functions, variables, macros, commands, user options, and special forms are described in this manual in a uniform format. The first line of a description contains the name of the item followed by its arguments, if any. The category--function, variable, or whatever--is printed next to the right margin. The description follows on succeeding lines, sometimes with examples.

A Sample Function Description

In a function description, the name of the function being described appears first. It is followed on the same line by a list of parameters. The names used for the parameters are also used in the body of the description.

The appearance of the keyword &optional in the parameter list indicates that the arguments for subsequent parameters may be omitted (omitted parameters default to nil). Do not write &optional when you call the function.

The keyword &rest (which will always be followed by a single parameter) indicates that any number of arguments can follow. The value of the single following parameter will be a list of all these arguments. Do not write &rest when you call the function.

Here is a description of an imaginary function foo:

Function: foo integer1 &optional integer2 &rest integers

The function foo subtracts integer1 from integer2, then adds all the rest of the arguments to the result. If integer2 is not supplied, then the number 19 is used by default.

(foo 1 5 3 9)
     => 16
(foo 5)
     => 14

More generally,

(foo w x y...)
==
(+ (- x w) y...)

Any parameter whose name contains the name of a type (e.g., integer, integer1 or buffer) is expected to be of that type. A plural of a type (such as buffers) often means a list of objects of that type. Parameters named object may be of any type. (See section Lisp Data Types, for a list of Emacs object types.) Parameters with other sorts of names (e.g., new-file) are discussed specifically in the description of the function. In some sections, features common to parameters of several functions are described at the beginning.

See section Lambda Expressions, for a more complete description of optional and rest arguments.

Command, macro, and special form descriptions have the same format, but the word `Function' is replaced by `Command', `Macro', or `Special Form', respectively. Commands are simply functions that may be called interactively; macros process their arguments differently from functions (the arguments are not evaluated), but are presented the same way.

Special form descriptions use a more complex notation to specify optional and repeated parameters because they can break the argument list down into separate arguments in more complicated ways. `[optional-arg]' means that optional-arg is optional and `repeated-args...' stands for zero or more arguments. Parentheses are used when several arguments are grouped into additional levels of list structure. Here is an example:

Special Form: count-loop (var [from to [inc]]) body...

This imaginary special form implements a loop that executes the body forms and then increments the variable var on each iteration. On the first iteration, the variable has the value from; on subsequent iterations, it is incremented by 1 (or by inc if that is given). The loop exits before executing body if var equals to. Here is an example:

(count-loop (i 0 10)
  (prin1 i) (princ " ")
  (prin1 (aref vector i)) (terpri))

If from and to are omitted, then var is bound to nil before the loop begins, and the loop exits if var is non-nil at the beginning of an iteration. Here is an example:

(count-loop (done)
  (if (pending)
      (fixit)
    (setq done t)))

In this special form, the arguments from and to are optional, but must both be present or both absent. If they are present, inc may optionally be specified as well. These arguments are grouped with the argument var into a list, to distinguish them from body, which includes all remaining elements of the form.

A Sample Variable Description

A variable is a name that can hold a value. Although any variable can be set by the user, certain variables that exist specifically so that users can change them are called user options. Ordinary variables and user options are described using a format like that for functions except that there are no arguments.

Here is a description of the imaginary electric-future-map variable.

Variable: electric-future-map

The value of this variable is a full keymap used by electric command future mode. The functions in this map will allow you to edit commands you have not yet thought about executing.

User option descriptions have the same format, but `Variable' is replaced by `User Option'.

Acknowledgements

This manual was written by Robert Krawitz, Bil Lewis, Dan LaLiberte, Richard M. Stallman and Chris Welty, the volunteers of the GNU manual group, in an effort extending over several years. Robert J. Chassell helped to review and edit the manual, with the support of the Defense Advanced Research Projects Agency, ARPA Order 6082, arranged by Warren A. Hunt, Jr. of Computational Logic, Inc.

Corrections were supplied by Karl Berry, Jim Blandy, Bard Bloom, David Boyes, Alan Carroll, David A. Duff, Beverly Erlebacher, David Eckelkamp, Eirik Fuller, Eric Hanchrow, George Hartzell, Nathan Hess, Dan Jacobson, Jak Kirman, Bob Knighten, Frederick M. Korz, Joe Lammens, K. Richard Magill, Brian Marick, Roland McGrath, Skip Montanaro, John Gardiner Myers, Arnold D. Robbins, Raul Rockwell, Shinichirou Sugou, Kimmo Suominen, Edward Tharp, Bill Trost, Jean White, Matthew Wilding, Carl Witty, Dale Worley, Rusty Wright, and David D. Zuhn.

Lisp Data Types

A Lisp object is a piece of data used and manipulated by Lisp programs. For our purposes, a type or data type is a set of possible objects.

Every object belongs to at least one type. Objects of the same type have similar structures and may usually be used in the same contexts. Types can overlap, and objects can belong to two or more types. Consequently, we can ask whether an object belongs to a particular type, but not for "the" type of an object.

A few fundamental object types are built into Emacs. These, from which all other types are constructed, are called primitive types. Each object belongs to one and only one primitive type. These types include integer, float, cons, symbol, string, vector, subr, byte-code function, and several special types, such as buffer, that are related to editing. (See section Editing Types.)

Each primitive type has a corresponding Lisp function that checks whether an object is a member of that type.

Note that Lisp is unlike many other languages in that Lisp objects are self-typing: the primitive type of the object is implicit in the object itself. For example, if an object is a vector, it cannot be treated as a number because Lisp knows it is a vector, not a number.

In most languages, the programmer must declare the data type of each variable, and the type is known by the compiler but not represented in the data. Such type declarations do not exist in Emacs Lisp. A Lisp variable can have any type of value, and remembers the type of any value you store in it.

This chapter describes the purpose, printed representation, and read syntax of each of the standard types in GNU Emacs Lisp. Details on how to use these types can be found in later chapters.

Printed Representation and Read Syntax

The printed representation of an object is the format of the output generated by the Lisp printer (the function print) for that object. The read syntax of an object is the format of the input accepted by the Lisp reader (the function read) for that object. Most objects have more than one possible read syntax. Some types of object have no read syntax; except for these cases, the printed representation of an object is also a read syntax for it.

In other languages, an expression is text; it has no other form. In Lisp, an expression is primarily a Lisp object and only secondarily the text that is the object's read syntax. Often there is no need to emphasize this distinction, but you must keep it in the back of your mind, or you will occasionally be very confused.

Every type has a printed representation. Some types have no read syntax, since it may not make sense to enter objects of these types directly in a Lisp program. For example, the buffer type does not have a read syntax. Objects of these types are printed in hash notation: the characters `#<' followed by a descriptive string (typically the type name followed by the name of the object), and closed with a matching `>'. Hash notation cannot be read at all, so the Lisp reader signals the error invalid-read-syntax whenever a `#<' is encountered.

(current-buffer)
     => #<buffer objects.texi>

When you evaluate an expression interactively, the Lisp interpreter first reads the textual representation of it, producing a Lisp object, and then evaluates that object (see section Evaluation). However, evaluation and reading are separate activities. Reading returns the Lisp object represented by the text that is read; the object may or may not be evaluated later. See section Input Functions, for a description of read, the basic function for reading objects.

Comments

A comment is text that is written in a program only for the sake of humans that read the program, and that has no effect on the meaning of the program. In Lisp, a comment starts with a semicolon (`;') if it is not within a string or character constant, and continues to the end of line. Comments are discarded by the Lisp reader, and do not become part of the Lisp objects which represent the program within the Lisp system.

See section Tips on Writing Comments, for conventions for formatting comments.

Programming Types

There are two general categories of types in Emacs Lisp: those having to do with Lisp programming, and those having to do with editing. The former are provided in many Lisp implementations, in one form or another. The latter are unique to Emacs Lisp.

Integer Type

Integers are the only kind of number in GNU Emacs Lisp, version 18. The range of values for integers is -8388608 to 8388607 (24 bits; i.e., to on most machines, but is 25 or 26 bits on some systems. It is important to note that the Emacs Lisp arithmetic functions do not check for overflow. Thus (1+ 8388607) is -8388608 on 24-bit implementations.

The read syntax for numbers is a sequence of (base ten) digits with an optional sign. The printed representation produced by the Lisp interpreter never has a leading `+'.

-1               ; The integer -1.
1                ; The integer 1.
+1               ; Also the integer 1.
16777217         ; Also the integer 1! 
                 ;   (on a 24-bit or 25-bit implementation)

See section Numbers, for more information.

Floating Point Type

Emacs version 19 supports floating point numbers, if compiled with the macro LISP_FLOAT_TYPE defined. The precise range of floating point numbers is machine-specific.

The printed representation for floating point numbers requires either a decimal point (with at least one digit following), an exponent, or both. For example, `1500.0', `15e2', `15.0e2', `1.5e3', and `.15e4' are five ways of writing a floating point number whose value is 1500. They are all equivalent.

See section Numbers, for more information.

Character Type

A character in Emacs Lisp is nothing more than an integer. In other words, characters are represented by their character codes. For example, the character A is represented as the integer 65.

Individual characters are not often used in programs. It is far more common to work with strings, which are sequences composed of characters. See section String Type.

Characters in strings, buffers, and files are currently limited to the range of 0 to 255. If an arbitrary integer is used as a character for those purposes, only the lower eight bits are significant. Characters that represent keyboard input have a much wider range.

Since characters are really integers, the printed representation of a character is a decimal number. This is also a possible read syntax for a character, but writing characters that way in Lisp programs is a very bad idea. You should always use the special read syntax formats that Emacs Lisp provides for characters. These syntax formats start with a question mark.

The usual read syntax for alphanumeric characters is a question mark followed by the character; thus, `?A' for the character A, `?B' for the character B, and `?a' for the character a.

For example:

?Q => 81

?q => 113

You can use the same syntax for punctuation characters, but it is often a good idea to add a `\' to prevent Lisp mode from getting confused. For example, `?\ ' is the way to write the space character. If the character is `\', you must use a second `\' to quote it: `?\\'.

You can express the characters control-g, backspace, tab, newline, vertical tab, formfeed, return, and escape as `?\a', `?\b', `?\t', `?\n', `?\v', `?\f', `?\r', `?\e', respectively. Those values are 7, 8, 9, 10, 11, 12, 13, and 27 in decimal. Thus,

?\a => 7                 ; C-g
?\b => 8                 ; backspace, BS, C-h
?\t => 9                 ; tab, TAB, C-i
?\n => 10                ; newline, LFD, C-j
?\v => 11                ; vertical tab, C-k
?\f => 12                ; formfeed character, C-l
?\r => 13                ; carriage return, RET, C-m
?\e => 27                ; escape character, ESC, C-[
?\\ => 92                ; backslash character, \

These sequences which start with backslash are also known as escape sequences, because backslash plays the role of an escape character, but they have nothing to do with the character ESC.

Control characters may be represented using yet another read syntax. This consists of a question mark followed by a backslash, caret, and the corresponding non-control character, in either upper or lower case. For example, either `?\^I' or `?\^i' may be used as the read syntax for the character C-i, the character whose value is 9.

Instead of the `^', you can use `C-'; thus, `?\C-i' is equivalent to `?\^I' and to `?\^i':

?\^I => 9
     
?\C-I => 9

For use in strings and buffers, you are limited to the control characters that exist in ASCII, but for keyboard input purposes, you can turn any character into a control character with `C-'. The character codes for these characters include the 2**22 bit as well as the code for the non-control character. Ordinary terminals have no way of generating non-ASCII control characters, but you can generate them straightforwardly using an X terminal.

The DEL key can be considered and written as Control-?:

?\^? => 127
     
?\C-? => 127

When you represent control characters to be found in files or strings, we recommend the `^' syntax; but when you refer to keyboard input, we prefer the `C-' syntax. This does not affect the meaning of the program, but may guide the understanding of people who read it.

A meta character is a character typed with the META key. The integer that represents such a character has the 2**23 bit set (which on most machines makes it a negative number). We use high bits for this and other modifiers to make possible a wide range of basic character codes.

In a string, the 2**7 bit indicates a meta character, so the meta characters that can fit in a string have codes in the range from 128 to 255, and are the meta versions of the ordinary ASCII characters. (In Emacs versions 18 and older, this convention was used for characters outside of strings as well.)

The read syntax for meta characters uses `\M-'. For example, `?\M-A' stands for M-A. You can use `\M-' together with octal codes, `\C-', or any other syntax for a character. Thus, you can write M-A as `?\M-A', or as `?\M-\101'. Likewise, you can write C-M-b as `?\M-\C-b', `?\C-\M-b', or `?\M-\002'.

The shift modifier is used in indicating the case of a character in special circumstances. The case of an ordinary letter is indicated by its character code as part of ASCII, but ASCII has no way to represent whether a control character is upper case or lower case. Emacs uses the 2**21 bit to indicate that the shift key was used for typing a control character. This distinction is possible only when you use X terminals or other special terminals; ordinary terminals do not indicate the distinction to the computer in any way.

The X Window system defines three other modifier bits that can be set in a character: hyper, super and alt. The syntaxes for these bits are `\H-', `\s-' and `\A-'. Thus, `?\H-\M-\A-x' represents Alt-Hyper-Meta-x. Numerically, the bit values are 2**18 for alt, 2**19 for super and 2**20 for hyper.

Finally, the most general read syntax consists of a question mark followed by a backslash and the character code in octal (up to three octal digits); thus, `?\101' for the character A, `?\001' for the character C-a, and ?\002 for the character C-b. Although this syntax can represent any ASCII character, it is preferred only when the precise octal value is more important than the ASCII representation.

?\012 => 10        ?\n => 10         ?\C-j => 10

?\101 => 65        ?A => 65           

A backslash is allowed, and harmless, preceding any character without a special escape meaning; thus, `?\A' is equivalent to `?A'. There is no reason to use a backslash before most such characters. However, any of the characters `()\|;'`"#.,' should be preceded by a backslash to avoid confusing the Emacs commands for editing Lisp code. Whitespace characters such as space, tab, newline and formfeed should also be preceded by a backslash. However, it is cleaner to use one of the easily readable escape sequences, such as `\t', instead of an actual control character such as a tab.

Sequence Types

A sequence is a Lisp object that represents an ordered set of elements. There are two kinds of sequence in Emacs Lisp, lists and arrays. Thus, an object of type list or of type array is also considered a sequence.

Arrays are further subdivided into strings and vectors. Vectors can hold elements of any type, but string elements must be characters in the range from 0 to 255. However, the characters in a string can have text properties; vectors do not support text properties even when their elements happen to be characters.

Lists, strings and vectors are different, but they have important similarities. For example, all have a length l, and all have elements which can be indexed from zero to l minus one. Also, several functions, called sequence functions, accept any kind of sequence. For example, the function elt can be used to extract an element of a sequence, given its index. See section Sequences, Arrays, and Vectors.

It is impossible to read the same sequence twice, in the sense of eq (see section Equality Predicates), since sequences are always created anew upon reading. There is one exception: the empty list () always stands for the same object, nil.

List Type

A list is a series of cons cells, linked together. A cons cell is an object comprising two pointers named the CAR and the CDR. Each of them can point to any Lisp object, but when the cons cell is part of a list, the CDR points either to another cons cell or to the empty list. See section Lists, for functions that work on lists.

The names CAR and CDR have only historical meaning now. The original Lisp implementation ran on an IBM 704 computer which divided words into two parts, called the "address" part and the "decrement"; CAR was an instruction to extract the contents of the address part of a register, and CDR an instruction to extract the contents of the decrement. By contrast, "cons cells" are named for the function cons that creates them, which in turn is named for its purpose, the construction of cells.

Because cons cells are so central to Lisp, we also have a word for "an object which is not a cons cell". These objects are called atoms.

The read syntax and printed representation for lists are identical, and consist of a left parenthesis, an arbitrary number of elements, and a right parenthesis.

Upon reading, any object inside the parentheses is made into an element of the list. That is, a cons cell is made for each element. The CAR of the cons cell points to the element, and its CDR points to the next cons cell which holds the next element in the list. The CDR of the last cons cell is set to point to nil.

A list can be illustrated by a diagram in which the cons cells are shown as pairs of boxes. (The Lisp reader cannot read such an illustration; unlike the textual notation, which can be understood both humans and computers, the box illustrations can only be understood by humans.) The following represents the three-element list (rose violet buttercup):

    ___ ___      ___ ___      ___ ___
   |___|___|--> |___|___|--> |___|___|--> nil
     |            |            |
     |            |            |
      --> rose     --> violet   --> buttercup

In the diagram, each box represents a slot that can refer to any Lisp object. Each pair of boxes represents a cons cell. Each arrow is a reference to a Lisp object, either an atom or another cons cell.

In this example, the first box, the CAR of the first cons cell, refers to or "contains" rose (a symbol). The second box, the CDR of the first cons cell, refers to the next pair of boxes, the second cons cell. The CAR of the second cons cell refers to violet and the CDR refers to the third cons cell. The CDR of the third (and last) cons cell refers to nil.

Here is another diagram of the same list, (rose violet buttercup), sketched in a different manner:

 ---------------       ----------------       -------------------
| car   | cdr   |     | car    | cdr   |     | car       | cdr   |
| rose  |   o-------->| violet |   o-------->| buttercup |  nil  |
|       |       |     |        |       |     |           |       |
 ---------------       ----------------       -------------------

A list with no elements in it is the empty list; it is identical to the symbol nil. In other words, nil is both a symbol and a list.

Here are examples of lists written in Lisp syntax:

(A 2 "A")            ; A list of three elements.
()                   ; A list of no elements (the empty list).
nil                  ; A list of no elements (the empty list).
("A ()")             ; A list of one element: the string "A ()".
(A ())               ; A list of two elements: A and the empty list.
(A nil)              ; Equivalent to the previous.
((A B C))            ; A list of one element
                     ;   (which is a list of three elements).

Here is the list (A ()), or equivalently (A nil), depicted with boxes and arrows:

    ___ ___      ___ ___
   |___|___|--> |___|___|--> nil
     |            |
     |            |
      --> A        --> nil

Dotted Pair Notation

Dotted pair notation is an alternative syntax for cons cells that represents the CAR and CDR explicitly. In this syntax, (a . b) stands for a cons cell whose CAR is the object a, and whose CDR is the object b. Dotted pair notation is therefore more general than list syntax. In the dotted pair notation, the list `(1 2 3)' is written as `(1 . (2 . (3 . nil)))'. For nil-terminated lists, the two notations produce the same result, but list notation is usually clearer and more convenient when it is applicable. When printing a list, the dotted pair notation is only used if the CDR of a cell is not a list.

Box notation can also be used to illustrate what dotted pairs look like. For example, (rose . violet) is diagrammed as follows:

    ___ ___
   |___|___|--> violet
     |
     |
      --> rose

Dotted pair notation can be combined with list notation to represent a chain of cons cells with a non-nil final CDR. For example, (rose violet . buttercup) is equivalent to (rose . (violet . buttercup)). The object looks like this:

    ___ ___      ___ ___
   |___|___|--> |___|___|--> buttercup
     |            |
     |            |
      --> rose     --> violet

These diagrams make it evident that (rose . violet . buttercup) must have an invalid syntax since it would require that a cons cell have three parts rather than two.

The list (rose violet) is equivalent to (rose . (violet)) and looks like this:

    ___ ___      ___ ___
   |___|___|--> |___|___|--> nil
     |            |
     |            |
      --> rose     --> violet

Similarly, the three-element list (rose violet buttercup) is equivalent to (rose . (violet . (buttercup))).

Association List Type

An association list or alist is a specially-constructed list whose elements are cons cells. In each element, the CAR is considered a key, and the CDR is considered an associated value. (In some cases, the associated value is stored in the CAR of the CDR.) Association lists are often used to implement stacks, since new associations may easily be added to or removed from the front of the list.

For example,

(setq alist-of-colors
      '((rose . red) (lily . white)  (buttercup . yellow)))

sets the variable alist-of-colors to an alist of three elements. In the first element, rose is the key and red is the value.

See section Association Lists, for a further explanation of alists and for functions that work on alists.

Array Type

An array is composed of an arbitrary number of other Lisp objects, arranged in a contiguous block of memory. Any element of an array may be accessed in constant time. In contrast, accessing an element of a list requires time proportional to the position of the element in the list. (Elements at the end of a list take longer to access than elements at the beginning of a list.)

Emacs defines two types of array, strings and vectors. A string is an array of characters and a vector is an array of arbitrary objects. Both are one-dimensional. (Most other programming languages support multidimensional arrays, but we don't think they are essential in Emacs Lisp.) Each type of array has its own read syntax; see section String Type, and section Vector Type.

An array may have any length up to the largest integer; but once created, it has a fixed size. The first element of an array has index zero, the second element has index 1, and so on. This is called zero-origin indexing. For example, an array of four elements has indices 0, 1, 2, and 3.

The array type is contained in the sequence type and contains both strings and vectors.

String Type

A string is an array of characters. Strings are used for many purposes in Emacs, as can be expected in a text editor; for example, as the names of Lisp symbols, as messages for the user, and to represent text extracted from buffers. Strings in Lisp are constants; evaluation of a string returns the same string.

The read syntax for strings is a double-quote, an arbitrary number of characters, and another double-quote, "like this". The Lisp reader accepts the same formats for reading the characters of a string as it does for reading single characters (without the question mark that begins a character literal). You can enter a nonprinting character such as tab, C-a or M-C-A using the convenient escape sequences, like this: "\t, \C-a, \M-\C-a". You can include a double-quote in a string by preceding it with a backslash; thus, "\"" is a string containing just a single double-quote character. (See section Character Type, for a description of the read syntax for characters.)

If you use the `\M-' syntax to indicate a meta character in a string constant, this sets the 2**7 bit of the character in the string. This is not the same representation that the meta modifier has in a character regarded as a simple integer. See section Character Type.

Strings cannot hold characters that have the hyper, super or alt modifiers; they can hold ASCII control characters, but no others. They do not distinguish case in ASCII control characters.

In contrast with the C programming language, Emacs Lisp allows newlines in string literals. But an escaped newline--one that is preceded by `\'---does not become part of the string; i.e., the Lisp reader ignores an escaped newline in a string literal.

"It is useful to include newlines
in documentation strings,
but the newline is \
ignored if escaped."
     => "It is useful to include newlines 
in documentation strings, 
but the newline is ignored if escaped."

The printed representation of a string consists of a double-quote, the characters it contains, and another double-quote. However, any backslash or double-quote characters in the string are preceded with a backslash like this: "this \" is an embedded quote".

A string can hold properties of the text it contains, in addition to the characters themselves. This enables programs that copy text between strings and buffers to preserve the properties with no special effort. See section Text Properties. Strings with text properties have a special read and print syntax:

#("characters" property-data...)

where property-data is zero or more elements in groups of three as follows:

beg end plist

The elements beg and end are integers, and together specify a portion of the string; plist is the property list for that portion.

See section Strings and Characters, for functions that work on strings.

Vector Type

A vector is a one-dimensional array of elements of any type. It takes a constant amount of time to access any element of a vector. (In a list, the access time of an element is proportional to the distance of the element from the beginning of the list.)

The printed representation of a vector consists of a left square bracket, the elements, and a right square bracket. This is also the read syntax. Like numbers and strings, vectors are considered constants for evaluation.

[1 "two" (three)]      ; A vector of three elements.
     => [1 "two" (three)]

See section Vectors, for functions that work with vectors.

Symbol Type

A symbol in GNU Emacs Lisp is an object with a name. The symbol name serves as the printed representation of the symbol. In ordinary use, the name is unique--no two symbols have the same name.

A symbol may be used in programs as a variable, as a function name, or to hold a list of properties. Or it may serve only to be distinct from all other Lisp objects, so that its presence in a data structure may be recognized reliably. In a given context, usually only one of these uses is intended.

A symbol name can contain any characters whatever. Most symbol names are written with letters, digits, and the punctuation characters `-+=*/'. Such names require no special punctuation; the characters of the name suffice as long as the name does not look like a number. (If it does, write a `\' at the beginning of the name to force interpretation as a symbol.) The characters `_~!@$%^&:<>{}' are less often used but also require no special punctuation. Any other characters may be included in a symbol's name by escaping them with a backslash. In contrast to its use in strings, however, a backslash in the name of a symbol quotes the single character that follows the backslash, without conversion. For example, in a string, `\t' represents a tab character; in the name of a symbol, however, `\t' merely quotes the letter t. To have a symbol with a tab character in its name, you must actually type an tab (preceded with a backslash). But you would hardly ever do such a thing.

Common Lisp note: in Common Lisp, lower case letters are always "folded" to upper case, unless they are explicitly escaped. This is in contrast to Emacs Lisp, in which upper case and lower case letters are distinct.

Here are several examples of symbol names. Note that the `+' in the fifth example is escaped to prevent it from being read as a number. This is not necessary in the last example because the rest of the name makes it invalid as a number.

foo                 ; A symbol named `foo'.
FOO                 ; A symbol named `FOO', different from `foo'.
char-to-string      ; A symbol named `char-to-string'.
1+                  ; A symbol named `1+'
                    ;   (not `+1', which is an integer).
\+1                 ; A symbol named `+1'
                    ;   (not a very readable name).
\(*\ 1\ 2\)         ; A symbol named `(* 1 2)' (a worse name).
+-*/_~!@$%^&=:<>{}  ; A symbol named `+-*/_~!@$%^&=:<>{}'.
                    ;   These characters need not be escaped.

Lisp Function Type

Just as functions in other programming languages are executable, Lisp function objects are pieces of executable code. However, functions in Lisp are primarily Lisp objects, and only secondarily the text which represents them. These Lisp objects are lambda expressions: lists whose first element is the symbol lambda (see section Lambda Expressions).

In most programming languages, it is impossible to have a function without a name. In Lisp, a function has no intrinsic name. A lambda expression is also called an anonymous function (see section Anonymous Functions). A named function in Lisp is actually a symbol with a valid function in its function cell (see section Defining Named Functions).

Most of the time, functions are called when their names are written in Lisp expressions in Lisp programs. However, a function object found or constructed at run time can be called and passed arguments with the primitive functions funcall and apply. See section Calling Functions.

Lisp Macro Type

A Lisp macro is a user-defined construct that extends the Lisp language. It is represented as an object much like a function, but with different parameter-passing semantics. A Lisp macro has the form of a list whose first element is the symbol macro and whose CDR is a Lisp function object, including the lambda symbol.

Lisp macro objects are usually defined with the built-in defmacro function, but any list that begins with macro is a macro as far as Emacs is concerned. See section Macros, for an explanation of how to write a macro.

Primitive Function Type

A primitive function is a function callable from Lisp but written in the C programming language. Primitive functions are also called subrs or built-in functions. (The word "subr" is derived from "subroutine".) Most primitive functions evaluate all their arguments when they are called. A primitive function that does not evaluate all its arguments is called a special form (see section Special Forms).

It does not matter to the caller of a function whether the function is primitive. However, this does matter if you are trying to substitute a function written in Lisp for a primitive of the same name. The reason is that the primitive function may be called directly from C code. When the redefined function is called from Lisp, the new definition will be used; but calls from C code may still use the old definition.

The term function is used to refer to all Emacs functions, whether written in Lisp or C. See section Lisp Function Type, for information about the functions written in Lisp.

Primitive functions have no read syntax and print in hash notation with the name of the subroutine.

(symbol-function 'car)          ; Access the function cell
                                ;   of the symbol.
     => #<subr car>
(subrp (symbol-function 'car))  ; Is this a primitive function?
     => t                       ; Yes.

Byte-Code Function Type

The byte compiler produces byte-code function objects. Internally, a byte-code function object is much like a vector; however, the evaluator handles this data type specially when it appears as a function to be called. See section Byte Compilation, for information about the byte compiler.

The printed representation for a byte-code function object is like that for a vector, with an additional `#' before the opening `['.

Autoload Type

An autoload object is a list whose first element is the symbol autoload. It is stored as the function definition of a symbol to say that a file of Lisp code should be loaded when necessary to find the true definition of that symbol. The autoload object contains the name of the file, plus some other information about the real definition.

After the file has been loaded, the symbol should have a new function definition that is not an autoload object. The new definition is then called as if it had been there to begin with. From the user's point of view, the function call works as expected, using the function definition in the loaded file.

An autoload object is usually created with the function autoload, which stores the object in the function cell of a symbol. See section Autoload, for more details.

Editing Types

The types in the previous section are common to many Lisp-like languages. But Emacs Lisp provides several additional data types for purposes connected with editing.

Buffer Type

A buffer is an object that holds text that can be edited (see section Buffers). Most buffers hold the contents of a disk file (see section Files) so they can be edited, but some are used for other purposes. Most buffers are also meant to be seen by the user, and therefore displayed, at some time, in a window (see section Windows). But a buffer need not be displayed in a window.

The contents of a buffer are much like a string, but buffers are not used like strings in Emacs Lisp, and the available operations are different. For example, text can be inserted into a buffer very quickly, while "inserting" text into a string is accomplished by concatenation and the result is an entirely new string object.

Each buffer has a designated position called point (see section Positions). And one buffer is the current buffer. Most editing commands act on the contents of the current buffer in the neighborhood of point. Many other functions manipulate or test the characters in the current buffer and much of this manual is devoted to describing these functions (see section Text).

Several other data structures are associated with each buffer:

The local keymap and variable list contain entries which individually override global bindings or values. These are used to customize the behavior of programs in different buffers, without actually changing the programs.

Buffers have no read syntax. They print in hash notation with the buffer name.

(current-buffer)
     => #<buffer objects.texi>

Window Type

A window describes the portion of the terminal screen that Emacs uses to display a buffer. Every window has one associated buffer, whose contents appear in the window. By contrast, a given buffer may appear in one window, no window, or several windows.

Though many windows may exist simultaneously, one window is designated the selected window. This is the window where the cursor is (usually) displayed when Emacs is ready for a command. The selected window usually displays the current buffer, but this is not necessarily the case.

Windows are grouped on the screen into frames; each window belongs to one and only one frame. See section Frame Type.

Windows have no read syntax. They print in hash notation, giving the window number and the name of the buffer being displayed. The window numbers exist to identify windows uniquely, since the buffer displayed in any given window can change frequently.

(selected-window)
     => #<window 1 on objects.texi>

See section Windows, for a description of the functions that work on windows.

Frame Type

A frame is a rectangle on the screen that contains one or more Emacs windows. A frame initially contains a single main window (plus perhaps a minibuffer window) which you can subdivide vertically or horizontally into smaller windows.

Frames have no read syntax. They print in hash notation, giving the frame's title, plus its address in core (useful to identify the frame uniquely).

(selected-frame)
     => #<frame xemacs@mole.gnu.ai.mit.edu 0xdac80>

See section Frames, for a description of the functions that work on frames.

Window Configuration Type

A window configuration stores information about the positions and sizes of windows at the time the window configuration is created, so that the screen layout may be recreated later.

Window configurations do not have a read syntax. They print as `#<window-configuration>'. See section Window Configurations, for a description of several functions related to window configurations.

Marker Type

A marker denotes a position in a specific buffer. Markers therefore have two components: one for the buffer, and one for the position. The position value is changed automatically as necessary as text is inserted into or deleted from the buffer. This is to ensure that the marker always points between the same two characters in the buffer.

Markers have no read syntax. They print in hash notation, giving the current character position and the name of the buffer.

(point-marker)
     => #<marker at 10779 in objects.texi>

See section Markers, for information on how to test, create, copy, and move markers.

Process Type

The word process means a running program. Emacs itself runs in a process of this sort. However, in Emacs Lisp, a process is a Lisp object that designates a subprocess created by Emacs process. External subprocesses, such as shells, GDB, ftp, and compilers, may be used to extend the processing capability of Emacs.

A process takes input from Emacs and returns output to Emacs for further manipulation. Both text and signals can be communicated between Emacs and a subprocess.

Processes have no read syntax. They print in hash notation, giving the name of the process:

(process-list)
     => (#<process shell>)

See section Processes, for information about functions that create, delete, return information about, send input or signals to, and receive output from processes.

Stream Type

A stream is an object that can be used as a source or sink for characters--either to supply characters for input or to accept them as output. Many different types can be used this way: markers, buffers, strings, and functions. Most often, input streams (character sources) obtain characters from the keyboard, a buffer, or a file, and output streams (character sinks) send characters to a buffer, such as a `*Help*' buffer, or to the echo area.

The object nil, in addition to its other meanings, may be used as a stream. It stands for the value of the variable standard-input or standard-output. Also, the object t as a stream specifies input using the minibuffer (see section Minibuffers) or output in the echo area (see section The Echo Area).

Streams have no special printed representation or read syntax, and print as whatever primitive type they are.

See section Reading and Printing Lisp Objects, for a description of various functions related to streams, including various parsing and printing functions.

Keymap Type

A keymap maps keys typed by the user to functions. This mapping controls how the user's command input is executed. A keymap is actually a list whose CAR is the symbol keymap.

See section Keymaps, for information about creating keymaps, handling prefix keys, local as well as global keymaps, and changing key bindings.

Syntax Table Type

A syntax table is a vector of 256 integers. Each element of the vector defines how one character is interpreted when it appears in a buffer. For example, in C mode (see section Major Modes), the `+' character is punctuation, but in Lisp mode it is a valid character in a symbol. These different interpretations are effected by changing the syntax table entry for `+', i.e., at index 43.

Syntax tables are only used for scanning text in buffers, not for reading Lisp expressions. The table the Lisp interpreter uses to read expressions is built into the Emacs source code and cannot be changed; thus, to change the list delimiters to be `{' and `}' instead of `(' and `)' would be impossible.

See section Syntax Tables, for details about syntax classes and how to make and modify syntax tables.

Display Table Type

A display table specifies how to display each character code. Each buffer and each window can have its own display table. A display table is actually a vector of length 261. See section Display Tables.

Overlay Type

An overlay specifies temporary alteration of the display appearance of a part of a buffer. It contains markers delimiting a range of the buffer, plus a property list (a list whose elements are alternating property names and values). Overlays are used to present parts of the buffer temporarily in a different display style.

See section Overlays, for how to create and use overlays.

Type Predicates

The Emacs Lisp interpreter itself does not perform type checking on the actual arguments passed to functions when they are called. It could not do otherwise, since variables in Lisp are not declared to be of a certain type, as they are in other programming languages. It is therefore up to the individual function to test whether each actual argument belongs to a type that can be used by the function.

All built-in functions do check the types of their actual arguments when appropriate and signal a wrong-type-argument error if an argument is of the wrong type. For example, here is what happens if you pass an argument to + which it cannot handle:

(+ 2 'a)
     error--> Wrong type argument: integer-or-marker-p, a

Many functions, called type predicates, are provided to test whether an object is a member of a given type. (Following a convention of long standing, the names of most Emacs Lisp predicates end in `p'.)

Here is a table of predefined type predicates, in alphabetical order, with references to further information.

atom
see section Predicates on Lists

arrayp
see section Functions that Operate on Arrays

bufferp
see section Buffer Basics

byte-code-function-p
see section Byte-Code Function Type

case-table-p
see section The Case Table

char-or-string-p
see section The Predicates for Strings

commandp
see section Interactive Call

consp
see section Predicates on Lists

floatp
see section Type Predicates for Numbers

frame-live-p
see section Deleting Frames

framep
see section Frames

integer-or-marker-p
see section Predicates on Markers

integerp
see section Type Predicates for Numbers

keymapp
see section Creating Keymaps

listp
see section Predicates on Lists

markerp
see section Predicates on Markers

natnump
see section Type Predicates for Numbers

nlistp
see section Predicates on Lists

numberp
see section Type Predicates for Numbers

number-or-marker-p
see section Predicates on Markers

overlayp
see section Overlays

processp
see section Processes

sequencep
see section Sequences

stringp
see section The Predicates for Strings

subrp
see section Accessing Function Cell Contents

symbolp
see section Symbols

syntax-table-p
see section Syntax Tables

user-variable-p
see section Defining Global Variables

vectorp
see section Vectors

window-configuration-p
see section Window Configurations

window-live-p
see section Deleting Windows

windowp
see section Basic Concepts of Emacs Windows

Equality Predicates

Here we describe two functions that test for equality between any two objects. Other functions test equality between objects of specific types, e.g., strings. See the appropriate chapter describing the data type for these predicates.

Function: eq object1 object2

This function returns t if object1 and object2 are the same object, nil otherwise. The "same object" means that a change in one will be reflected by the same change in the other.

eq returns t if object1 and object2 are integers with the same value. Also, since symbol names are normally unique, if the arguments are symbols with the same name, they are eq. For other types (e.g., lists, vectors, strings), two arguments with the same contents or elements are not necessarily eq to each other: they are eq only if they are the same object.

(The make-symbol function returns an uninterned symbol that is not interned in the standard obarray. When uninterned symbols are in use, symbol names are no longer unique. Distinct symbols with the same name are not eq. See section Creating and Interning Symbols.)

(eq 'foo 'foo)
     => t

(eq 456 456)
     => t

(eq "asdf" "asdf")
     => nil

(eq '(1 (2 (3))) '(1 (2 (3))))
     => nil

(eq [(1 2) 3] [(1 2) 3])
     => nil

(eq (point-marker) (point-marker))
     => nil

Function: equal object1 object2

This function returns t if object1 and object2 have equal components, nil otherwise. Whereas eq tests if its arguments are the same object, equal looks inside nonidentical arguments to see if their elements are the same. So, if two objects are eq, they are equal, but the converse is not always true.

(equal 'foo 'foo)
     => t

(equal 456 456)
     => t

(equal "asdf" "asdf")
     => t
(eq "asdf" "asdf")
     => nil

(equal '(1 (2 (3))) '(1 (2 (3))))
     => t
(eq '(1 (2 (3))) '(1 (2 (3))))
     => nil

(equal [(1 2) 3] [(1 2) 3])
     => t
(eq [(1 2) 3] [(1 2) 3])
     => nil

(equal (point-marker) (point-marker))
     => t

(eq (point-marker) (point-marker))
     => nil

Comparison of strings is case-sensitive.

(equal "asdf" "ASDF")
     => nil

The test for equality is implemented recursively, and circular lists may therefore cause infinite recursion (leading to an error).

Numbers

GNU Emacs supports two numeric data types: integers and floating point numbers. Integers are whole numbers such as -3, 0, 7, 13, and 511. Their values are exact. Floating point numbers are numbers with fractional parts, such as -4.5, 0.0, or 2.71828. They can also be expressed in an exponential notation as well: thus, 1.5e2 equals 150; in this example, `e2' stands for ten to the second power, and is multiplied by 1.5. Floating point values are not exact; they have a fixed, limited amount of precision.

Support for floating point numbers is a new feature in Emacs 19, and it is controlled by a separate compilation option, so you may encounter a site where Emacs does not support them.

Integer Basics

The range of values for an integer depends on the machine. The range is -8388608 to 8388607 (24 bits; i.e., to ) on most machines, but on others it is -16777216 to 16777215 (25 bits), or -33554432 to 33554431 (26 bits). All of the examples shown below assume an integer has 24 bits.

The Lisp reader reads numbers as a sequence of digits with an optional sign.

 1               ; The integer 1.
+1               ; Also the integer 1.
-1               ; The integer -1.
 16777217        ; Also the integer 1, due to overflow.
 0               ; The number 0.
-0               ; The number 0.
 1.              ; The integer 1.

To understand how various functions work on integers, especially the bitwise operators (see section Bitwise Operations on Integers), it is often helpful to view the numbers in their binary form.

In 24 bit binary, the decimal integer 5 looks like this:

0000 0000  0000 0000  0000 0101

(We have inserted spaces between groups of 4 bits, and two spaces between groups of 8 bits, to make the binary integer easier to read.)

The integer -1 looks like this:

1111 1111  1111 1111  1111 1111

-1 is represented as 24 ones. (This is called two's complement notation.)

The negative integer, -5, is creating by subtracting 4 from -1. In binary, the decimal integer 4 is 100. Consequently, -5 looks like this:

1111 1111  1111 1111  1111 1011

In this implementation, the largest 24 bit binary integer is the decimal integer 8,388,607. In binary, this number looks like this:

0111 1111  1111 1111  1111 1111

Since the arithmetic functions do not check whether integers go outside their range, when you add 1 to 8,388,607, the value is negative integer -8,388,608:

(+ 1 8388607)
     => -8388608
     => 1000 0000  0000 0000  0000 0000

Many of the following functions accept markers for arguments as well as integers. (See section Markers.) More precisely, the actual parameters to such functions may be either integers or markers, which is why we often give these parameters the name int-or-marker. When the actual parameter is a marker, the position value of the marker is used and the buffer of the marker is ignored.

Floating Point Basics

Emacs version 19 supports floating point numbers, if compiled with the macro LISP_FLOAT_TYPE defined. The precise range of floating point numbers is machine-specific; it is the same as the range of the C data type double on the machine in question.

The printed representation for floating point numbers requires either a decimal point (with at least one digit following), an exponent, or both. For example, `1500.0', `15e2', `15.0e2', `1.5e3', and `.15e4' are five ways of writing a floating point number whose value is 1500. They are all equivalent. You can also use a minus sign to write negative floating point numbers, as in `-1.0'.

You can use logb to extract the binary exponent of a floating point number (or estimate the logarithm of an integer):

Function: logb number

This function returns the binary exponent of number. More precisely, the value is the logarithm of number base 2, rounded down to an integer.

Type Predicates for Numbers

The functions in this section test whether the argument is a number or whether it is a certain sort of number. The functions integerp and floatp can take any type of Lisp object as argument (the predicates would not be of much use otherwise); but the zerop predicate requires a number as its argument. See also integer-or-marker-p and number-or-marker-p, in section Predicates on Markers.

Function: floatp object

This predicate tests whether its argument is a floating point number and returns t if so, nil otherwise.

floatp does not exist in Emacs versions 18 and earlier.

Function: integerp object

This predicate tests whether its argument is an integer, and returns t if so, nil otherwise.

Function: numberp object

This predicate tests whether its argument is a number (either integer or floating point), and returns t if so, nil otherwise.

Function: natnump object

The natnump predicate (whose name comes from the phrase "natural-number-p") tests to see whether its argument is a nonnegative integer, and returns t if so, nil otherwise. 0 is considered non-negative.

Markers are not converted to integers, hence natnump of a marker is always nil.

People have pointed out that this function is misnamed, because the term "natural number" is usually understood as excluding zero. We are open to suggestions for a better name to use in a future version.

Function: zerop number

This predicate tests whether its argument is zero, and returns t if so, nil otherwise. The argument must be a number.

These two forms are equivalent: (zerop x) == (= x 0).

Comparison of Numbers

Floating point numbers in Emacs Lisp actually take up storage, and there can be many distinct floating point number objects with the same numeric value. If you use eq to compare them, then you test whether two values are the same object. If you want to compare just the numeric values, use =.

If you use eq to compare two integers, it always returns t if they have the same value. This is sometimes useful, because eq accepts arguments of any type and never causes an error, whereas = signals an error if the arguments are not numbers or markers. However, it is a good idea to use = if you can, even for comparing integers, just in case we change the representation of integers in a future Emacs version.

There is another wrinkle: because floating point arithmetic is not exact, it is often a bad idea to check for equality of two floating point values. Usually it is better to test for approximate equality. Here's a function to do this:

(defvar fuzz-factor 1.0e-6)

(defun approx-equal (x y)
  (< (/ (abs (- x y))
        (max (abs x) (abs y)))
     fuzz-factor))

Common Lisp note: because of the way numbers are implemented in Common Lisp, you generally need to use `=' to test for equality between numbers of any kind.

Function: = number-or-marker1 number-or-marker2

This function tests whether its arguments are the same number, and returns t if so, nil otherwise.

Function: /= number-or-marker1 number-or-marker2

This function tests whether its arguments are not the same number, and returns t if so, nil otherwise.

Function: < number-or-marker1 number-or-marker2

This function tests whether its first argument is strictly less than its second argument. It returns t if so, nil otherwise.

Function: <= number-or-marker1 number-or-marker2

This function tests whether its first argument is less than or equal to its second argument. It returns t if so, nil otherwise.

Function: > number-or-marker1 number-or-marker2

This function tests whether its first argument is strictly greater than its second argument. It returns t if so, nil otherwise.

Function: >= number-or-marker1 number-or-marker2

This function tests whether its first argument is greater than or equal to its second argument. It returns t if so, nil otherwise.

Function: max number-or-marker &rest numbers-or-markers

This function returns the largest of its arguments.

(max 20)
     => 20
(max 1 2)
     => 2
(max 1 3 2)
     => 3

Function: min number-or-marker &rest numbers-or-markers

This function returns the smallest of its arguments.

Numeric Conversions

To convert an integer to floating point, use the function float.

Function: float number

This returns number converted to floating point. If number is already a floating point number, float returns it unchanged.

There are four functions to convert floating point numbers to integers; they differ in how they round. You can call these functions with an integer argument also; if you do, they return it without change.

Function: truncate number

This returns number, converted to an integer by rounding towards zero.

Function: floor number &optional divisor

This returns number, converted to an integer by rounding downward (towards negative infinity).

If divisor is specified, number is divided by divisor before the floor is taken; this is the division operation that corresponds to mod. An arith-error results if divisor is 0.

Function: ceiling number

This returns number, converted to an integer by rounding upward (towards positive infinity).

Function: round number

This returns number, converted to an integer by rounding towards the nearest integer.

Arithmetic Operations

Emacs Lisp provides the traditional four arithmetic operations: addition, subtraction, multiplication, and division. Remainder and modulus functions supplement the division functions. The functions to add or subtract 1 are provided because they are traditional in Lisp and commonly used.

All of these functions except % return a floating point value if any argument is floating.

It is important to note that in GNU Emacs Lisp, arithmetic functions do not check for overflow. Thus (1+ 8388607) may equal -8388608, depending on your hardware.

Function: 1+ number-or-marker

This function returns number-or-marker plus 1. For example,

(setq foo 4)
     => 4
(1+ foo)
     => 5

This function is not analogous to the C operator ++---it does not increment a variable. It just computes a sum. Thus,

foo
     => 4

If you want to increment the variable, you must use setq, like this:

(setq foo (1+ foo))
     => 5

Function: 1- number-or-marker

This function returns number-or-marker minus 1.

Function: abs number

This returns the absolute value of number.

Function: + &rest numbers-or-markers

This function adds its arguments together. When given no arguments, + returns 0. It does not check for overflow.

(+)
     => 0
(+ 1)
     => 1
(+ 1 2 3 4)
     => 10

Function: - &optional number-or-marker &rest other-numbers-or-markers

The - function serves two purposes: negation and subtraction. When - has a single argument, the value is the negative of the argument. When there are multiple arguments, each of the other-numbers-or-markers is subtracted from number-or-marker, cumulatively. If there are no arguments, the result is 0. This function does not check for overflow.

(- 10 1 2 3 4)
     => 0
(- 10)
     => -10
(-)
     => 0

Function: * &rest numbers-or-markers

This function multiplies its arguments together, and returns the product. When given no arguments, * returns 1. It does not check for overflow.

(*)
     => 1
(* 1)
     => 1
(* 1 2 3 4)
     => 24

Function: / dividend divisor &rest divisors

This function divides dividend by divisors and returns the quotient. If there are additional arguments divisors, then dividend is divided by each divisor in turn. Each argument may be a number or a marker.

If all the arguments are integers, then the result is an integer too. This means the result has to be rounded. On most machines, the result is rounded towards zero after each division, but some machines may round differently with negative arguments. This is because the Lisp function / is implemented using the C division operator, which has the same possibility for machine-dependent rounding. As a practical matter, all known machines round in the standard fashion.

If you divide by 0, an arith-error error is signaled. (See section Errors.)

(/ 6 2)
     => 3
(/ 5 2)
     => 2
(/ 25 3 2)
     => 4
(/ -17 6)
     => -2

Since the division operator in Emacs Lisp is implemented using the division operator in C, the result of dividing negative numbers may in principle vary from machine to machine, depending on how they round the result. Thus, the result of (/ -17 6) could be -3 on some machines. In practice, all known machines round the quotient towards 0.

Function: % dividend divisor

This function returns the integer remainder after division of dividend by divisor. The arguments must be integers or markers.

For negative arguments, the value is in principle machine-dependent since the quotient is; but in practice, all known machines behave alike.

An arith-error results if divisor is 0.

(% 9 4)
     => 1
(% -9 4)
     => -1
(% 9 -4)
     => 1
(% -9 -4)
     => -1

For any two integers dividend and divisor,

(+ (% dividend divisor)
   (* (/ dividend divisor) divisor))

always equals dividend.

Function: mod dividend divisor

This function returns the value of dividend modulo divisor; in other words, the remainder after division of dividend by divisor, but with the same sign as divisor. The arguments must be numbers or markers.

Unlike %, the result is well-defined for negative arguments. Also, floating point arguments are permitted.

An arith-error results if divisor is 0.

(mod 9 4)
     => 1
(mod -9 4)
     => 3
(mod 9 -4)
     => -3
(mod -9 -4)
     => -1

For any two numbers dividend and divisor,

(+ (mod dividend divisor)
   (* (floor dividend divisor) divisor))

always equals dividend, subject to rounding error if either argument is floating point.

Bitwise Operations on Integers

In a computer, an integer is represented as a binary number, a sequence of bits (digits which are either zero or one). A bitwise operation acts on the individual bits of such a sequence. For example, shifting moves the whole sequence left or right one or more places, reproducing the same pattern "moved over".

The bitwise operations in Emacs Lisp apply only to integers.

Function: lsh integer1 count

lsh, which is an abbreviation for logical shift, shifts the bits in integer1 to the left count places, or to the right if count is negative. If count is negative, lsh shifts zeros into the most-significant bit, producing a positive result even if integer1 is negative. Contrast this with ash, below.

Thus, the decimal number 5 is the binary number 00000101. Shifted once to the left, with a zero put in the one's place, the number becomes 00001010, decimal 10.

Here are two examples of shifting the pattern of bits one place to the left. Since the contents of the rightmost place has been moved one place to the left, a value has to be inserted into the rightmost place. With lsh, a zero is placed into the rightmost place. (These examples show only the low-order eight bits of the binary pattern; the rest are all zero.)

(lsh 5 1)
     => 10

;; Decimal 5 becomes decimal 10.
00000101 => 00001010

(lsh 7 1)
     => 14

;; Decimal 7 becomes decimal 14.
00000111 => 00001110

As the examples illustrate, shifting the pattern of bits one place to the left produces a number that is twice the value of the previous number.

Note, however that functions do not check for overflow, and a returned value may be negative (and in any case, no more than a 24 bit value) when an integer is sufficiently left shifted.

For example, left shifting 8,388,607 produces -2:

(lsh 8388607 1)          ; left shift
     => -2

In binary, in the 24 bit implementation, the numbers looks like this:

;; Decimal 8,388,607
0111 1111  1111 1111  1111 1111         

which becomes the following when left shifted:

;; Decimal -2
1111 1111  1111 1111  1111 1110         

Shifting the pattern of bits two places to the left produces results like this (with 8-bit binary numbers):

(lsh 3 2)
     => 12

;; Decimal 3 becomes decimal 12.
00000011 => 00001100       

On the other hand, shifting the pattern of bits one place to the right looks like this:

(lsh 6 -1)
     => 3

;; Decimal 6 becomes decimal 3.
00000110 => 00000011       

(lsh 5 -1)
     => 2

;; Decimal 5 becomes decimal 2.
00000101 => 00000010       

As the example illustrates, shifting the pattern of bits one place to the right divides the value of the binary number by two, rounding downward.

Function: ash integer1 count

ash (arithmetic shift) shifts the bits in integer1 to the left count places, or to the right if count is negative.

ash gives the same results as lsh except when integer1 and count are both negative. In that case, ash puts a one in the leftmost position, while lsh puts a zero in the leftmost position.

Thus, with ash, shifting the pattern of bits one place to the right looks like this:

(ash -6 -1)
     => -3            

;; Decimal -6
;; becomes decimal -3.

1111 1111  1111 1111  1111 1010
     => 
1111 1111  1111 1111  1111 1101

In contrast, shifting the pattern of bits one place to the right with lsh looks like this:

(lsh -6 -1)
     => 8388605       

;; Decimal -6
;; becomes decimal 8,388,605.

1111 1111  1111 1111  1111 1010
     => 
0111 1111  1111 1111  1111 1101

In this case, the 1 in the leftmost position is shifted one place to the right, and a zero is shifted into the leftmost position.

Here are other examples:

                   ;               24-bit binary values

(lsh 5 2)          ;   5  =  0000 0000  0000 0000  0000 0101
     => 20         ;  20  =  0000 0000  0000 0000  0001 0100
(ash 5 2)
     => 20
(lsh -5 2)         ;  -5  =  1111 1111  1111 1111  1111 1011
     => -20        ; -20  =  1111 1111  1111 1111  1110 1100
(ash -5 2)
     => -20
(lsh 5 -2)         ;   5  =  0000 0000  0000 0000  0000 0101
     => 1          ;   1  =  0000 0000  0000 0000  0000 0001
(ash 5 -2)
     => 1
(lsh -5 -2)        ;  -5  =  1111 1111  1111 1111  1111 1011
     => 4194302    ;         0011 1111  1111 1111  1111 1110
(ash -5 -2)        ;  -5  =  1111 1111  1111 1111  1111 1011
     => -2         ;  -2  =  1111 1111  1111 1111  1111 1110

Function: logand &rest ints-or-markers

This function returns the "logical and" of the arguments: the nth bit is set in the result if, and only if, the nth bit is set in all the arguments. ("Set" means that the value of the bit is 1 rather than 0.)

For example, using 4-bit binary numbers, the "logical and" of 13 and 12 is 12: 1101 combined with 1100 produces 1100.

In both the binary numbers, the leftmost two bits are set (i.e., they are 1's), so the leftmost two bits of the returned value are set. However, for the rightmost two bits, each is zero in at least one of the arguments, so the rightmost two bits of the returned value are 0's.

Therefore,

(logand 13 12)
     => 12

If logand is not passed any argument, it returns a value of -1. This number is an identity element for logand because its binary representation consists entirely of ones. If logand is passed just one argument, it returns that argument.

                   ;                24-bit binary values

(logand 14 13)     ; 14  =  0000 0000  0000 0000  0000 1110
                   ; 13  =  0000 0000  0000 0000  0000 1101
     => 12         ; 12  =  0000 0000  0000 0000  0000 1100

(logand 14 13 4)   ; 14  =  0000 0000  0000 0000  0000 1110
                   ; 13  =  0000 0000  0000 0000  0000 1101
                   ;  4  =  0000 0000  0000 0000  0000 0100
     => 4          ;  4  =  0000 0000  0000 0000  0000 0100

(logand)
     => -1         ; -1  =  1111 1111  1111 1111  1111 1111

Function: logior &rest ints-or-markers

This function returns the "inclusive or" of its arguments: the nth bit is set in the result if, and only if, the nth bit is set in at least one of the arguments. If there are no arguments, the result is zero, which is an identity element for this operation. If logior is passed just one argument, it returns that argument.

                   ;               24-bit binary values

(logior 12 5)      ; 12  =  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000 0000  0000 0000  0000 0101
     => 13         ; 13  =  0000 0000  0000 0000  0000 1101

(logior 12 5 7)    ; 12  =  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000 0000  0000 0000  0000 0101
                   ;  7  =  0000 0000  0000 0000  0000 0111
     => 15         ; 15  =  0000 0000  0000 0000  0000 1111

Function: logxor &rest ints-or-markers

This function returns the "exclusive or" of its arguments: the nth bit is set in the result if, and only if, the nth bit is set in an odd number of the arguments. If there are no arguments, the result is 0. If logxor is passed just one argument, it returns that argument.

                   ;               24-bit binary values

(logxor 12 5)      ; 12  =  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000 0000  0000 0000  0000 0101
     => 9          ;  9  =  0000 0000  0000 0000  0000 1001

(logxor 12 5 7)    ; 12  =  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000 0000  0000 0000  0000 0101
                   ;  7  =  0000 0000  0000 0000  0000 0111
     => 14         ; 14  =  0000 0000  0000 0000  0000 1110

Function: lognot integer

This function returns the logical complement of its argument: the nth bit is one in the result if, and only if, the nth bit is zero in integer, and vice-versa.

;;  5  =  0000 0000  0000 0000  0000 0101
;; becomes
;; -6  =  1111 1111  1111 1111  1111 1010

(lognot 5)             
     => -6

Transcendental Functions

These mathematical functions are available if floating point is supported. They allow integers as well as floating point numbers as arguments.

Function: sin arg

Function: cos arg

Function: tan arg

These are the ordinary trigonometric functions, with argument measured in radians.

Function: asin arg

The value of (asin arg) is a number between - pi / 2 and pi / 2 (inclusive) whose sine is arg; if, however, arg is out of range (outside [-1, 1]), then the result is a NaN.

Function: acos arg

The value of (acos arg) is a number between 0 and pi (inclusive) whose cosine is arg; if, however, arg is out of range (outside [-1, 1]), then the result is a NaN.

Function: atan arg

The value of (atan arg) is a number between - pi / 2 and pi / 2 (exclusive) whose tangent is arg.

Function: exp arg

This is the exponential function; it returns e to the power arg.

Function: log arg &optional base

This function returns the logarithm of arg, with base base. If you don't specify base, the base e is used. If arg is negative, the result is a NaN.

Function: log10 arg

This function returns the logarithm of arg, with base 10. If arg is negative, the result is a NaN.

Function: expt x y

This function returns x raised to power y.

Function: sqrt arg

This returns the square root of arg.

Random Numbers

In a computer, a series of pseudo-random numbers is generated in a deterministic fashion. The numbers are not truly random, but they have certain properties that mimic a random series. For example, all possible values occur equally often in a pseudo-random series.

In Emacs, pseudo-random numbers are generated from a "seed" number. Starting from any given seed, the random function always generates the same sequence of numbers. Emacs always starts with the same seed value, so the sequence of values of random is actually the same in each Emacs run! For example, in one operating system, the first call to (random) after you start Emacs always returns -1457731, and the second one always returns -7692030. This is helpful for debugging.

If you want truly unpredictable random numbers, execute (random t). This chooses a new seed based on the current time of day and on Emacs' process ID number.

Function: random &optional limit

This function returns a pseudo-random integer. When called more than once, it returns a series of pseudo-random integers.

If limit is nil, then the value may in principle be any integer. If limit is a positive integer, the value is chosen to be nonnegative and less than limit (only in Emacs 19).

If limit is t, it means to choose a new seed based on the current time of day and on Emacs's process ID number.

On some machines, any integer representable in Lisp may be the result of random. On other machines, the result can never be larger than a certain maximum or less than a certain (negative) minimum.

Strings and Characters

A string in Emacs Lisp is an array that contains an ordered sequence of characters. Strings are used as names of symbols, buffers, and files, to send messages to users, to hold text being copied between buffers, and for many other purposes. Because strings are so important, many functions are provided expressly for manipulating them. Emacs Lisp programs use strings more often than individual characters.

See section Putting Keyboard Events in Strings, for special considerations when using strings of keyboard character events.

Introduction to Strings and Characters

Strings in Emacs Lisp are arrays that contain an ordered sequence of characters. Characters are represented in Emacs Lisp as integers; whether an integer was intended as a character or not is determined only by how it is used. Thus, strings really contain integers.

The length of a string (like any array) is fixed and independent of the string contents, and cannot be altered. Strings in Lisp are not terminated by a distinguished character code. (By contrast, strings in C are terminated by a character with ASCII code 0.) This means that any character, including the null character (ASCII code 0), is a valid element of a string.

Since strings are considered arrays, you can operate on them with the general array functions. (See section Sequences, Arrays, and Vectors.) For example, you can access or change individual characters in a string using the functions aref and aset (see section Functions that Operate on Arrays).

Each character in a string is stored in a single byte. Therefore, numbers not in the range 0 to 255 are truncated when stored into a string. This means that a string takes up much less memory than a vector of the same length.

Sometimes key sequences are represented as strings. When a string is a key sequence, string elements in the range 128 to 255 represent meta characters (which are extremely large integers) rather than keyboard events in the range 128 to 255.

Strings cannot hold characters that have the hyper, super or alt modifiers; they can hold ASCII control characters, but no others. They do not distinguish case in ASCII control characters. See section Character Type, for more information about representation of meta and other modifiers for keyboard input characters.

Like a buffer, a string can contain text properties for the characters in it, as well as the characters themselves. See section Text Properties.

See section Text, for information about functions that display strings or copy them into buffers. See section Character Type, and section String Type, for information about the syntax of characters and strings.

The Predicates for Strings

For more information about general sequence and array predicates, see section Sequences, Arrays, and Vectors, and section Arrays.

Function: stringp object

This function returns t if object is a string, nil otherwise.

Function: char-or-string-p object

This function returns t if object is a string or a character (i.e., an integer), nil otherwise.

Creating Strings

The following functions create strings, either from scratch, or by putting strings together, or by taking them apart.

Function: make-string count character

This function returns a string made up of count repetitions of character. If count is negative, an error is signaled.

(make-string 5 ?x)
     => "xxxxx"
(make-string 0 ?x)
     => ""

Other functions to compare with this one include char-to-string (see section Conversion of Characters and Strings), make-vector (see section Vectors), and make-list (see section Building Cons Cells and Lists).

Function: substring string start &optional end

This function returns a new string which consists of those characters from string in the range from (and including) the character at the index start up to (but excluding) the character at the index end. The first character is at index zero.

(substring "abcdefg" 0 3)
     => "abc"

Here the index for `a' is 0, the index for `b' is 1, and the index for `c' is 2. Thus, three letters, `abc', are copied from the full string. The index 3 marks the character position up to which the substring is copied. The character whose index is 3 is actually the fourth character in the string.

A negative number counts from the end of the string, so that -1 signifies the index of the last character of the string. For example:

(substring "abcdefg" -3 -1)
     => "ef"

In this example, the index for `e' is -3, the index for `f' is -2, and the index for `g' is -1. Therefore, `e' and `f' are included, and `g' is excluded.

When nil is used as an index, it falls after the last character in the string. Thus:

(substring "abcdefg" -3 nil)
     => "efg"

Omitting the argument end is equivalent to specifying nil. It follows that (substring string 0) returns a copy of all of string.

(substring "abcdefg" 0)
     => "abcdefg"

But we recommend copy-sequence for this purpose (see section Sequences).

A wrong-type-argument error is signaled if either start or end are non-integers. An args-out-of-range error is signaled if start indicates a character following end, or if either integer is out of range for string.

Contrast this function with buffer-substring (see section Examining Buffer Contents), which returns a string containing a portion of the text in the current buffer. The beginning of a string is at index 0, but the beginning of a buffer is at index 1.

Function: concat &rest sequences

This function returns a new string consisting of the characters in the arguments passed to it. The arguments may be strings, lists of numbers, or vectors of numbers; they are not themselves changed. If no arguments are passed to concat, it returns an empty string.

(concat "abc" "-def")
     => "abc-def"
(concat "abc" (list 120 (+ 256 121)) [122])
     => "abcxyz"
(concat "The " "quick brown " "fox.")
     => "The quick brown fox."
(concat)
     => ""

The second example above shows how characters stored in strings are taken modulo 256. In other words, each character in the string is stored in one byte.

The concat function always constructs a new string that is not eq to any existing string.

When an argument is an integer (not a sequence of integers), it is converted to a string of digits making up the decimal printed representation of the integer. This special case exists for compatibility with Mocklisp, and we don't recommend you take advantage of it. If you want to convert an integer in this way, use format (see section Formatting Strings) or int-to-string (see section Conversion of Characters and Strings).

(concat 137)
     => "137"
(concat 54 321)
     => "54321"

For information about other concatenation functions, see the description of mapconcat in section Mapping Functions, vconcat in section Vectors, and append in section Building Cons Cells and Lists.

Comparison of Characters and Strings

Function: char-equal character1 character2

This function returns t if the arguments represent the same character, nil otherwise. This function ignores differences in case if case-fold-search is non-nil.

(char-equal ?x ?x)
     => t
(char-to-string (+ 256 ?x))
     => "x"
(char-equal ?x  (+ 256 ?x))
     => t

Function: string= string1 string2

This function returns t if the characters of the two strings match exactly; case is significant.

(string= "abc" "abc")
     => t
(string= "abc" "ABC")
     => nil
(string= "ab" "ABC")
     => nil

Function: string-equal string1 string2

string-equal is another name for string=.

Function: string< string1 string2

This function compares two strings a character at a time. First it scans both the strings at once to find the first pair of corresponding characters that do not match. If the lesser character of those two is the character from string1, then string1 is less, and this function returns t. If the lesser character is the one from string2, then string1 is greater, and this function returns nil. If the two strings match entirely, the value is nil.

Pairs of characters are compared by their ASCII codes. Keep in mind that lower case letters have higher numeric values in the ASCII character set than their upper case counterparts; numbers and many punctuation characters have a lower numeric value than upper case letters.

(string< "abc" "abd")
     => t
(string< "abd" "abc")
     => nil
(string< "123" "abc")
     => t

When the strings have different lengths, and they match up to the length of string1, then the result is t. If they match up to the length of string2, the result is nil. A string without any characters in it is the smallest possible string.

(string< "" "abc")
     => t
(string< "ab" "abc")
     => t
(string< "abc" "")
     => nil
(string< "abc" "ab")
     => nil
(string< "" "")
     => nil                   

Function: string-lessp string1 string2

string-lessp is another name for string<.

See compare-buffer-substrings in section Comparing Text, for a way to compare text in buffers.

Conversion of Characters and Strings

Characters and strings may be converted into each other and into integers. format and prin1-to-string (see section Output Functions) may also be used to convert Lisp objects into strings. read-from-string (see section Input Functions) may be used to "convert" a string representation of a Lisp object into an object.

See section Documentation, for a description of functions which return a string representing the Emacs standard notation of the argument character (single-key-description and text-char-description). These functions are used primarily for printing help messages.

Function: char-to-string character

This function returns a new string with a length of one character. The value of character, modulo 256, is used to initialize the element of the string.

This function is similar to make-string with an integer argument of 1. (See section Creating Strings.) This conversion can also be done with format using the `%c' format specification. (See section Formatting Strings.)

(char-to-string ?x)
     => "x"
(char-to-string (+ 256 ?x))
     => "x"
(make-string 1 ?x)
     => "x"

Function: string-to-char string

This function returns the first character in string. If the string is empty, the function returns 0. The value is also 0 when the first character of string is the null character, ASCII code 0.

(string-to-char "ABC")
     => 65
(string-to-char "xyz")
     => 120
(string-to-char "")
     => 0
(string-to-char "\000")
     => 0

This function may be eliminated in the future if it does not seem useful enough to retain.

Function: number-to-string number

Function: int-to-string number

This function returns a string consisting of the printed representation of number, which may be an integer or a floating point number. The value starts with a sign if the argument is negative.

(int-to-string 256)
     => "256"
(int-to-string -23)
     => "-23"
(int-to-string -23.5)
     => "-23.5"

See also the function format in section Formatting Strings.

Function: string-to-number string

Function: string-to-int string

This function returns the integer value of the characters in string, read as a number in base ten. It skips spaces at the beginning of string, then reads as much of string as it can interpret as a number. (On some systems it ignores other whitespace at the beginning, not just spaces.) If the first character after the ignored whitespace is not a digit or a minus sign, this function returns 0.

(string-to-number "256")
     => 256
(string-to-number "25 is a perfect square.")
     => 25
(string-to-number "X256")
     => 0
(string-to-number "-4.5")
     => -4.5

Formatting Strings

Formatting means constructing a string by substitution of computed values at various places in a constant string. This string controls how the other values are printed as well as where they appear; it is called a format string.

Formatting is often useful for computing messages to be displayed. In fact, the functions message and error provide the same formatting feature described here; they differ from format only in how they use the result of formatting.

Function: format string &rest objects

This function returns a new string that is made by copying string and then replacing any format specification in the copy with encodings of the corresponding objects. The arguments objects are the computed values to be formatted.

A format specification is a sequence of characters beginning with a `%'. Thus, if there is a `%d' in string, the format function replaces it with the printed representation of one of the values to be formatted (one of the arguments objects). For example:

(format "The value of fill-column is %d." fill-column)
     => "The value of fill-column is 72."

If string contains more than one format specification, the format specifications are matched with successive values from objects. Thus, the first format specification in string is matched with the first such value, the second format specification is matched with the second such value, and so on. Any extra format specifications (those for which there are no corresponding values) cause unpredictable behavior. Any extra values to be formatted will be ignored.

Certain format specifications require values of particular types. However, no error is signaled if the value actually supplied fails to have the expected type. Instead, the output is likely to be meaningless.

Here is a table of the characters that can follow `%' to make up a format specification:

`s'
Replace the specification with the printed representation of the object, made without quoting. Thus, strings are represented by their contents alone, with no `"' characters, and symbols appear without `\' characters.

If there is no corresponding object, the empty string is used.

`S'
Replace the specification with the printed representation of the object, made with quoting. Thus, strings are enclosed in `"' characters, and `\' characters appear where necessary before special characters.

If there is no corresponding object, the empty string is used.

`o'
Replace the specification with the base-eight representation of an integer.

`d'
Replace the specification with the base-ten representation of an integer.

`x'
Replace the specification with the base-sixteen representation of an integer.

`c'
Replace the specification with the character which is the value given.

`e'
Replace the specification with the exponential notation for a floating point number.

`f'
Replace the specification with the decimal-point notation for a floating point number.

`g'
Replace the specification with notation for a floating point number, using either exponential notation or decimal-point notation whichever is shorter.

`%'
A single `%' is placed in the string. This format specification is unusual in that it does not use a value. For example, (format "%% %d" 30) returns "% 30".

Any other format character results in an `Invalid format operation' error.

Here are several examples:

(format "The name of this buffer is %s." (buffer-name))
     => "The name of this buffer is strings.texi."

(format "The buffer object prints as %s." (current-buffer))
     => "The buffer object prints as #<buffer strings.texi>."

(format "The octal value of 18 is %o, 
         and the hex value is %x." 18 18)
     => "The octal value of 18 is 22, 
         and the hex value is 12."

All the specification characters allow an optional numeric prefix between the `%' and the character. The optional numeric prefix defines the minimum width for the object. If the printed representation of the object contains fewer characters than this, then it is padded. The padding is on the left if the prefix is positive (or starts with zero) and on the right if the prefix is negative. The padding character is normally a space, but if the numeric prefix starts with a zero, zeros are used for padding.

(format "%06d will be padded on the left with zeros" 123)
     => "000123 will be padded on the left with zeros"

(format "%-6d will be padded on the right" 123)
     => "123    will be padded on the right"

format never truncates an object's printed representation, no matter what width you specify. Thus, you can use a numeric prefix to specify a minimum spacing between columns with no risk of losing information.

In the following three examples, `%7s' specifies a minimum width of 7. In the first case, the string inserted in place of `%7s' has only 3 letters, so 4 blank spaces are inserted for padding. In the second case, the string "specification" is 13 letters wide but is not truncated. In the third case, the padding is on the right.

(format "The word `%7s' actually has %d letters in it." "foo" 
        (length "foo"))
     => "The word `    foo' actually has 3 letters in it."  

(format "The word `%7s' actually has %d letters in it."
        "specification" 
        (length "specification")) 
     => "The word `specification' actually has 13 letters in it."  

(format "The word `%-7s' actually has %d letters in it." "foo" 
        (length "foo"))
     => "The word `foo    ' actually has 3 letters in it."  

Character Case

The character case functions change the case of single characters or of the contents of strings. The functions convert only alphabetic characters (the letters `A' through `Z' and `a' through `z'); other characters are not altered. The functions do not modify the strings that are passed to them as arguments.

The examples below use the characters `X' and `x' which have ASCII codes 88 and 120 respectively.

Function: downcase string-or-char

This function converts a character or a string to lower case.

When the argument to downcase is a string, the function creates and returns a new string in which each letter in the argument that is upper case is converted to lower case. When the argument to downcase is a character, downcase returns the corresponding lower case character. This value is an integer. If the original character is lower case, or is not a letter, then the value equals the original character.

(downcase "The cat in the hat")
     => "the cat in the hat"

(downcase ?X)
     => 120

Function: upcase string-or-char

This function converts a character or a string to upper case.

When the argument to upcase is a string, the function creates and returns a new string in which each letter in the argument that is lower case is converted to upper case.

When the argument to upcase is a character, upcase returns the corresponding upper case character. This value is an integer. If the original character is upper case, or is not a letter, then the value equals the original character.

(upcase "The cat in the hat")
     => "THE CAT IN THE HAT"

(upcase ?x)
     => 88

Function: capitalize string-or-char

This function capitalizes strings or characters. If string-or-char is a string, the function creates and returns a new string, whose contents are a copy of string-or-char in which each word has been capitalized. This means that the first character of each word is converted to upper case, and the rest are converted to lower case.

The definition of a word is any sequence of consecutive characters that are assigned to the word constituent category in the current syntax table (See section Table of Syntax Classes).

When the argument to capitalize is a character, capitalize has the same result as upcase.

(capitalize "The cat in the hat")
     => "The Cat In The Hat"

(capitalize "THE 77TH-HATTED CAT")
     => "The 77th-Hatted Cat"

(capitalize ?x)
     => 88

The Case Table

You can customize case conversion by installing a special case table. A case table specifies the mapping between upper case and lower case letters. It affects both the string and character case conversion functions (see the previous section) and those that apply to text in the buffer (see section Case Changes). Use case table if you are using a language which has letters that are not the standard ASCII letters.

A case table is a list of this form:

(downcase upcase canonicalize equivalences)

where each element is either nil or a string of length 256. The element downcase says how to map each character to its lower-case equivalent. The element upcase maps each character to its upper-case equivalent. If lower and upper case characters are in one-to-one correspondence, use nil for upcase; then Emacs deduces the upcase table from downcase.

For some languages, upper and lower case letters are not in one-to-one correspondence. There may be two different lower case letters with the same upper case equivalent. In these cases, you need to specify the maps for both directions.

The element canonicalize maps each character to a canonical equivalent; any two characters that are related by case-conversion have the same canonical equivalent character.

The element equivalences is a map that cyclicly permutes each equivalence class (of characters with the same canonical equivalent). (For ordinary ASCII, this would map `a' into `A' and `A' into `a', and likewise for each set of equivalent characters.)

You can provide nil for both canonicalize and equivalences, in which case both are deduced from downcase and upcase. Normally, that's what you should do, when you construct a case table. Alternatively, you can provide suitable strings for both canonicalize and equivalences. When you look at the case table that's in use, you will find non-nil values for those components. Do not try to make just one of these components nil; that is not meaningful.

Each buffer has a case table. Emacs also has a standard case table which is copied into each buffer when you create the buffer. (Changing the standard case table doesn't affect any existing buffers.)

Here are the functions for working with case tables:

Function: case-table-p object

This predicate returns non-nil if object is a valid case table.

Function: set-standard-case-table table

This function makes table the standard case table, so that it will apply to any buffers created subsequently.

Function: standard-case-table

This returns the standard case table.

Function: current-case-table

This function returns the current buffer's case table.

Function: set-case-table table

This sets the current buffer's case table to table.

The following three functions are convenient subroutines for packages that define non-ASCII character sets. They modify a string downcase-table provided as an argument; this should be a string to be used as the downcase part of a case table. They also modify two syntax tables, the standard syntax table and the Text mode syntax table. (See section Syntax Tables.)

Function: set-case-syntax-pair uc lc downcase-table

This function specifies a pair of corresponding letters, one upper case and one lower case.

Function: set-case-syntax-delims l r downcase-table

This function makes characters l and r a matching pair of case-invariant delimiters.

Function: set-case-syntax char syntax downcase-table

This function makes char case-invariant, with syntax syntax.

Command: describe-buffer-case-table

This command displays a description of the contents of the current buffer's case table.

You can load the library `iso-syntax' to set up the syntax and case table for the 256 bit ISO Latin 1 character set.

Lists

A list represents a sequence of zero or more elements (which may be any Lisp objects). The important difference between lists and vectors is that two or more lists can share part of their structure; in addition, you can insert or delete elements in a list without copying the whole list.

Lists and Cons Cells

Lists in Lisp are not a primitive data type; they are built up from cons cells. A cons cell is a data object which represents an ordered pair. It records two Lisp objects, one labeled as the CAR, and the other labeled as the CDR. (These names are traditional.)

A list is made by chaining cons cells together, one cons cell per element. By convention, the CARs of the cons cells are the elements of the list, and the CDRs are used to chain the list: the CDR of each cons cell is the following cons cell. The CDR of the last cons cell is nil. This asymmetry between the CAR and the CDR is entirely a matter of convention; at the level of cons cells, the CAR and CDR slots have the same characteristics.

The symbol nil is considered a list as well as a symbol; it is the list with no elements. For convenience, the symbol nil is considered to have nil as its CDR (and also as its CAR).

The CDR of any nonempty list l is a list containing all the elements of l except the first.

Lists as Linked Pairs of Boxes

A cons cell can be illustrated as a pair of boxes. The first box represents the CAR and the second box represents the CDR. Here is an illustration of the two-element list, (tulip lily), made from two cons cells:

 ---------------         ---------------
| car   | cdr   |       | car   | cdr   |
| tulip |   o---------->| lily  |  nil  |
|       |       |       |       |       |
 ---------------         ---------------

Each pair of boxes represents a cons cell. Each box "refers to", "points to" or "contains" a Lisp object. (These terms are synonymous.) The first box, which is the CAR of the first cons cell, contains the symbol tulip. The arrow from the CDR of the first cons cell to the second cons cell indicates that the CDR of the first cons cell points to the second cons cell.

The same list can be illustrated in a different sort of box notation like this:

    ___ ___      ___ ___
   |___|___|--> |___|___|--> nil
     |            |
     |            |
      --> tulip    --> lily

Here is a more complex illustration, this time of the three-element list, ((pine needles) oak maple), the first element of which is a two-element list:

    ___ ___      ___ ___      ___ ___
   |___|___|--> |___|___|--> |___|___|--> nil
     |            |            |
     |            |            |
     |             --> oak      --> maple
     |
     |     ___ ___      ___ ___
      --> |___|___|--> |___|___|--> nil
            |            |
            |            |
             --> pine     --> needles

The same list is represented in the first box notation like this:

 --------------       --------------       --------------
| car   | cdr  |     | car   | cdr  |     | car   | cdr  |
|   o   |   o------->| oak   |   o------->| maple |  nil |
|   |   |      |     |       |      |     |       |      |
 -- | ---------       --------------       --------------
    |
    |
    |        --------------       ----------------
    |       | car   | cdr  |     | car     | cdr  |
     ------>| pine  |   o------->| needles |  nil |
            |       |      |     |         |      |
             --------------       ----------------

See section List Type, for the read and print syntax of lists, and for more "box and arrow" illustrations of lists.

Predicates on Lists

The following predicates test whether a Lisp object is an atom, is a cons cell or is a list, or whether it is the distinguished object nil. (Many of these tests can be defined in terms of the others, but they are used so often that it is worth having all of them.)

Function: consp object

This function returns t if object is a cons cell, nil otherwise. nil is not a cons cell, although it is a list.

Function: atom object

This function returns t if object is an atom, nil otherwise. All objects except cons cells are atoms. The symbol nil is an atom and is also a list; it is the only Lisp object which is both.

(atom object) == (not (consp object))

Function: listp object

This function returns t if object is a cons cell or nil. Otherwise, it returns nil.

(listp '(1))
     => t
(listp '())
     => t

Function: nlistp object

This function is the opposite of listp: it returns t if object is not a list. Otherwise, it returns nil.

(listp object) == (not (nlistp object))

Function: null object

This function returns t if object is nil, and returns nil otherwise. This function is identical to not, but as a matter of clarity we use null when object is considered a list and not when it is considered a truth value (see not in section Constructs for Combining Conditions).

(null '(1))
     => nil
(null '())
     => t

Accessing Elements of Lists

Function: car cons-cell

This function returns the value pointed to by the first pointer of the cons cell cons-cell. Expressed another way, this function returns the CAR of cons-cell.

As a special case, if cons-cell is nil, then car is defined to return nil; therefore, any list is a valid argument for car. An error is signaled if the argument is not a cons cell or nil.

(car '(a b c))
     => a
(car '())
     => nil

Function: cdr cons-cell

This function returns the value pointed to by the second pointer of the cons cell cons-cell. Expressed another way, this function returns the CDR of cons-cell.

As a special case, if cons-cell is nil, then cdr is defined to return nil; therefore, any list is a valid argument for cdr. An error is signaled if the argument is not a cons cell or nil.

(cdr '(a b c))
     => (b c)
(cdr '())
     => nil

Function: car-safe object

This function lets you take the CAR of a cons cell while avoiding errors for other data types. It returns the CAR of object if object is a cons cell, nil otherwise. This is in contrast to car, which signals an error if object is not a list.

(car-safe object)
==
(let ((x object))
  (if (consp x)
      (car x)
    nil))

Function: cdr-safe object

This function lets you take the CDR of a cons cell while avoiding errors for other data types. It returns the CDR of object if object is a cons cell, nil otherwise. This is in contrast to cdr, which signals an error if object is not a list.

(cdr-safe object)
==
(let ((x object))
  (if (consp x)
      (cdr x)
    nil))

Function: nth n list

This function returns the nth element of list. Elements are numbered starting with zero, so the CAR of list is element number zero. If the length of list is n or less, the value is nil.

If n is less than zero, then the first element is returned.

(nth 2 '(1 2 3 4))
     => 3
(nth 10 '(1 2 3 4))
     => nil
(nth -3 '(1 2 3 4))
     => 1

(nth n x) == (car (nthcdr n x))

Function: nthcdr n list

This function returns the nth cdr of list. In other words, it removes the first n links of list and returns what follows.

If n is less than or equal to zero, then all of list is returned. If the length of list is n or less, the value is nil.

(nthcdr 1 '(1 2 3 4))
     => (2 3 4)
(nthcdr 10 '(1 2 3 4))
     => nil
(nthcdr -3 '(1 2 3 4))
     => (1 2 3 4)

Building Cons Cells and Lists

Many functions build lists, as lists reside at the very heart of Lisp. cons is the fundamental list-building function; however, it is interesting to note that list is used more times in the source code for Emacs than cons.

Function: cons object1 object2

This function is the fundamental function used to build new list structure. It creates a new cons cell, making object1 the CAR, and object2 the CDR. It then returns the new cons cell. The arguments object1 and object2 may be any Lisp objects, but most often object2 is a list.

(cons 1 '(2))
     => (1 2)
(cons 1 '())
     => (1)
(cons 1 2)
     => (1 . 2)

cons is often used to add a single element to the front of a list. This is called consing the element onto the list. For example:

(setq list (cons newelt list))

Note that there is no conflict between the variable named list used in this example and the function named list described below; any symbol can serve both functions.

Function: list &rest objects

This function creates a list with objects as its elements. The resulting list is always nil-terminated. If no objects are given, the empty list is returned.

(list 1 2 3 4 5)
     => (1 2 3 4 5)
(list 1 2 '(3 4 5) 'foo)
     => (1 2 (3 4 5) foo)
(list)
     => nil

Function: make-list length object

This function creates a list of length length, in which all the elements have the identical value object. Compare make-list with make-string (see section Creating Strings).

(make-list 3 'pigs)
     => (pigs pigs pigs)
(make-list 0 'pigs)
     => nil

Function: append &rest sequences

This function returns a list containing all the elements of sequences. The sequences may be lists, vectors, strings, or integers. All arguments except the last one are copied, so none of them are altered.

The final argument to append may be any object but it is typically a list. The final argument is not copied or converted; it becomes part of the structure of the new list.

Here is an example:

(setq trees '(pine oak))
     => (pine oak)
(setq more-trees (append '(maple birch) trees))
     => (maple birch pine oak)

trees
     => (pine oak)
more-trees
     => (maple birch pine oak)
(eq trees (cdr (cdr more-trees)))
     => t

You can see what happens by looking at a box diagram. The variable trees is set to the list (pine oak) and then the variable more-trees is set to the list (maple birch pine oak). However, the variable trees continues to refer to the original list:

more-trees                trees
|                           |
|     ___ ___      ___ ___   -> ___ ___      ___ ___
 --> |___|___|--> |___|___|--> |___|___|--> |___|___|--> nil
       |            |            |            |
       |            |            |            |
        --> maple    -->birch     --> pine     --> oak

An empty sequence contributes nothing to the value returned by append. As a consequence of this, a final nil argument forces a copy of the previous argument.

trees
     => (pine oak)
(setq wood (append trees ()))
     => (pine oak)
wood
     => (pine oak)
(eq wood trees)
     => nil

This once was the standard way to copy a list, before the function copy-sequence was invented. See section Sequences, Arrays, and Vectors.

With the help of apply, we can append all the lists in a list of lists:

(apply 'append '((a b c) nil (x y z) nil))
     => (a b c x y z)

If no sequences are given, nil is returned:

(append)
     => nil

In the special case where one of the sequences is an integer (not a sequence of integers), it is first converted to a string of digits making up the decimal print representation of the integer. This special case exists for compatibility with Mocklisp, and we don't recommend you take advantage of it. If you want to convert an integer in this way, use format (see section Formatting Strings) or number-to-string (see section Conversion of Characters and Strings).

(setq trees '(pine oak))
     => (pine oak)
(char-to-string 54)
     => "6"
(setq longer-list (append trees 6 '(spruce)))
     => (pine oak 54 spruce)
(setq x-list (append trees 6 6))
     => (pine oak 54 . 6)

See nconc in section Functions that Rearrange Lists, for another way to join lists without copying.

Function: reverse list

This function creates a new list whose elements are the elements of list, but in reverse order. The original argument list is not altered.

(setq x '(1 2 3 4))
     => (1 2 3 4)
(reverse x)
     => (4 3 2 1)
x
     => (1 2 3 4)

Modifying Existing List Structure

You can modify the CAR and CDR contents of a cons cell with the primitives setcar and setcdr.

Common Lisp note: Common Lisp uses functions rplaca and rplacd to alter list structure; they change structure the same way as setcar and setcdr, but the Common Lisp functions return the cons cell while setcar and setcdr return the new CAR or CDR.

Altering List Elements with setcar

Changing the CAR of a cons cell is done with setcar and replaces one element of a list with a different element.

Function: setcar cons object

This function stores object as the new CAR of cons, replacing its previous CAR. It returns the value object. For example:

(setq x '(1 2))
     => (1 2)
(setcar x '4)
     => 4
x
     => (4 2)

When a cons cell is part of the shared structure of several lists, storing a new CAR into the cons changes one element of each of these lists. Here is an example:

;; Create two lists that are partly shared.
(setq x1 '(a b c))
     => (a b c)
(setq x2 (cons 'z (cdr x1)))
     => (z b c)

;; Replace the CAR of a shared link.
(setcar (cdr x1) 'foo)
     => foo
x1                           ; Both lists are changed.
     => (a foo c)
x2
     => (z foo c)

;; Replace the CAR of a link that is not shared.
(setcar x1 'baz)
     => baz
x1                           ; Only one list is changed.
     => (baz foo c)
x2
     => (z foo c)

Here is a graphical depiction of the shared structure of the two lists x1 and x2, showing why replacing b changes them both:

        ___ ___        ___ ___      ___ ___
x1---> |___|___|----> |___|___|--> |___|___|--> nil
         |        -->   |            |
         |       |      |            |
          --> a  |       --> b        --> c
                 |
       ___ ___   |
x2--> |___|___|--
        |
        |
         --> z

Here is an alternative form of box diagram, showing the same relationship:

x1:
 --------------       --------------       --------------
| car   | cdr  |     | car   | cdr  |     | car   | cdr  |
|   a   |   o------->|   b   |   o------->|   c   |  nil |
|       |      |  -->|       |      |     |       |      |
 --------------  |    --------------       --------------
                 |
x2:              |
 --------------  |
| car   | cdr  | |
|   z   |   o----
|       |      |
 --------------

Altering the CDR of a List

The lowest-level primitive for modifying a CDR is setcdr:

Function: setcdr cons object

This function stores object into the cdr of cons. The value returned is object, not cons.

Here is an example of replacing the CDR of a list with a different list. All but the first element of the list are removed in favor of a different sequence of elements. The first element is unchanged, because it resides in the CAR of the list, and is not reached via the CDR.

(setq x '(1 2 3))
     => (1 2 3)
(setcdr x '(4))
     => (4)
x
     => (1 4)

You can delete elements from the middle of a list by altering the CDRs of the cons cells in the list. For example, here we delete the second element, b, from the list (a b c), by changing the CDR of the first cell:

(setq x1 '(a b c))
     => (a b c)
(setcdr x1 (cdr (cdr x1)))
     => (c)
x1
     => (a c)

Here is the result in box notation:

                   --------------------
                  |                    |
 --------------   |   --------------   |    --------------
| car   | cdr  |  |  | car   | cdr  |   -->| car   | cdr  |
|   a   |   o-----   |   b   |   o-------->|   c   |  nil |
|       |      |     |       |      |      |       |      |
 --------------       --------------        --------------

The second cons cell, which previously held the element b, still exists and its CAR is still b, but it no longer forms part of this list.

It is equally easy to insert a new element by changing CDRs:

(setq x1 '(a b c))
     => (a b c)
(setcdr x1 (cons 'd (cdr x1)))
     => (d b c)
x1
     => (a d b c)

Here is this result in box notation:

 --------------        -------------       -------------
| car  | cdr   |      | car  | cdr  |     | car  | cdr  |
|   a  |   o   |   -->|   b  |   o------->|   c  |  nil |
|      |   |   |  |   |      |      |     |      |      |
 --------- | --   |    -------------       -------------
           |      |
     -----         --------
    |                      |
    |    ---------------   |
    |   | car   | cdr   |  |
     -->|   d   |   o------
        |       |       |
         ---------------

Functions that Rearrange Lists

Here are some functions that rearrange lists "destructively" by modifying the CDRs of their component cons cells. We call these functions "destructive" because the original lists passed as arguments to them are chewed up to produce a new list that is subsequently returned.

Function: nconc &rest lists

This function returns a list containing all the elements of lists. Unlike append (see section Building Cons Cells and Lists), the lists are not copied. Instead, the last CDR of each of the lists is changed to refer to the following list. The last of the lists is not altered. For example:

(setq x '(1 2 3))
     => (1 2 3)
(nconc x '(4 5))
     => (1 2 3 4 5)
x
     => (1 2 3 4 5)

Since the last argument of nconc is not itself modified, it is reasonable to use a constant list, such as '(4 5), as is done in the above example. For the same reason, the last argument need not be a list:

(setq x '(1 2 3))
     => (1 2 3)
(nconc x 'z)
     => (1 2 3 . z)
x
     => (1 2 3 . z)

A common pitfall is to use a quoted constant list as a non-last argument to nconc. If you do this, your program will change each time you run it! Here is what happens:

(defun add-foo (x)            ; This function should add
  (nconc '(foo) x))           ;   foo to the front of its arg.

(symbol-function 'add-foo)
     => (lambda (x) (nconc (quote (foo)) x))

(setq xx (add-foo '(1 2)))    ; It seems to work.
     => (foo 1 2)
(setq xy (add-foo '(3 4)))    ; What happened?
     => (foo 1 2 3 4)
(eq xx xy)
     => t

(symbol-function 'add-foo)
     => (lambda (x) (nconc (quote (foo 1 2 3 4) x)))

Function: nreverse list

This function reverses the order of the elements of list. Unlike reverse, nreverse alters its argument destructively by reversing the CDRs in the cons cells forming the list. The cons cell which used to be the last one in list becomes the first cell of the value.

For example:

(setq x '(1 2 3 4))
     => (1 2 3 4)
x
     => (1 2 3 4)
(nreverse x)
     => (4 3 2 1)
;; The cell that was first is now last.
x
     => (1)

To avoid confusion, we usually store the result of nreverse back in the same variable which held the original list:

(setq x (nreverse x))

Here is the nreverse of our favorite example, (a b c), presented graphically:

Original list head:                       Reversed list:
 -------------        -------------        ------------
| car  | cdr  |      | car  | cdr  |      | car | cdr  |
|   a  |  nil |<--   |   b  |   o  |<--   |   c |   o  |
|      |      |   |  |      |   |  |   |  |     |   |  |
 -------------    |   --------- | -    |   -------- | -
                  |             |      |            |
                   -------------        ------------

Function: sort list predicate

This function sorts list stably, though destructively, and returns the sorted list. It compares elements using predicate. A stable sort is one in which elements with equal sort keys maintain their relative order before and after the sort. Stability is important when successive sorts are used to order elements according to different criteria.

The argument predicate must be a function that accepts two arguments. It is called with two elements of list. To get an increasing order sort, the predicate should return t if the first element is "less than" the second, or nil if not.

The destructive aspect of sort is that it rearranges the cons cells forming list by changing CDRs. A nondestructive sort function would create new cons cells to store the elements in their sorted order. If you wish to sort a list without destroying the original, copy it first with copy-sequence.

The CARs of the cons cells are not changed; the cons cell that originally contained the element a in list still has a in its CAR after sorting, but it now appears in a different position in the list due to the change of CDRs. For example:

(setq nums '(1 3 2 6 5 4 0))
     => (1 3 2 6 5 4 0)
(sort nums '<)
     => (0 1 2 3 4 5 6)
nums
     => (1 2 3 4 5 6)

Note that the list in nums no longer contains 0; this is the same cons cell that it was before, but it is no longer the first one in the list. Don't assume a variable that formerly held the argument now holds the entire sorted list! Instead, save the result of sort and use that. Most often we store the result back into the variable that held the original list:

(setq nums (sort nums '<))

See section Sorting Text, for more functions that perform sorting. See documentation in section Access to Documentation Strings, for a useful example of sort.

The function delq in the following section is another example of destructive list manipulation.

Using Lists as Sets

A list can represent an unordered mathematical set--simply consider a value an element of a set if it appears in the list, and ignore the order of the list. To form the union of two sets, use append (as long as you don't mind having duplicate elements). Other useful functions for sets include memq and delq, and their equal versions, member and delete.

Common Lisp note: Common Lisp has functions union (which avoids duplicate elements) and intersection for set operations, but GNU Emacs Lisp does not have them. You can write them in Lisp if you wish.

Function: memq object list

This function tests to see whether object is a member of list. If it is, memq returns a list starting with the first occurrence of object. Otherwise, it returns nil. The letter `q' in memq says that it uses eq to compare object against the elements of the list. For example:

(memq 2 '(1 2 3 2 1))
     => (2 3 2 1)
(memq '(2) '((1) (2)))    ; (2) and (2) are not eq.
     => nil

Function: delq object list

This function removes all elements eq to object from list. The letter `q' in delq says that it uses eq to compare object against the elements of the list, like memq.

When delq deletes elements from the front of the list, it does so simply by advancing down the list and returning a sublist that starts after those elements:

(delq 'a '(a b c))
==
(cdr '(a b c))

When an element to be deleted appears in the middle of the list, removing it involves changing the CDRs (see section Altering the CDR of a List).

(setq sample-list '(1 2 3 (4)))
     => (1 2 3 (4))
(delq 1 sample-list)
     => (2 3 (4))
sample-list
     => (1 2 3 (4))
(delq 2 sample-list)
     => (1 3 (4))
sample-list
     => (1 3 (4))

Note that (delq 2 sample-list) modifies sample-list to splice out the second element, but (delq 1 sample-list) does not splice anything--it just returns a shorter list. Don't assume that a variable which formerly held the argument list now has fewer elements, or that it still holds the original list! Instead, save the result of delq and use that. Most often we store the result back into the variable that held the original list:

(setq flowers (delq 'rose flowers))

In the following example, the (4) that delq attempts to match and the (4) in the sample-list are not eq:

(delq '(4) sample-list)
     => (1 3 (4))

The following two functions are like memq and delq but use equal rather than eq to compare elements. They are new in Emacs 19.

Function: member object list

The function member tests to see whether object is a member of list, comparing members with object using equal. If object is a member, member returns a list starting with its first occurrence in list. Otherwise, it returns nil.

Compare this with memq:

(member '(2) '((1) (2)))  ; (2) and (2) are equal.
     => ((2))
(memq '(2) '((1) (2)))    ; (2) and (2) are not eq.
     => nil
;; Two strings with the same contents are equal.
(member "foo" '("foo" "bar"))
     => ("foo" "bar")

Function: delete object list

This function removes all elements equal to object from list. It is to delq as member is to memq: it uses equal to compare elements with object, like member; when it finds an element that matches, it removes the element just as delq would. For example:

(delete '(2) '((2) (1) (2)))
     => '((1))

Common Lisp note: The functions member and delete in GNU Emacs Lisp are derived from Maclisp, not Common Lisp. The Common Lisp versions do not use equal to compare elements.

Association Lists

An association list, or alist for short, records a mapping from keys to values. It is a list of cons cells called associations: the CAR of each cell is the key, and the CDR is the associated value. (This usage of "key" is not related to the term "key sequence"; it means any object which can be looked up in a table.)

Here is an example of an alist. The key pine is associated with the value cones; the key oak is associated with acorns; and the key maple is associated with seeds.

'((pine . cones)
  (oak . acorns)
  (maple . seeds))

The associated values in an alist may be any Lisp objects; so may the keys. For example, in the following alist, the symbol a is associated with the number 1, and the string "b" is associated with the list (2 3), which is the CDR of the alist element:

((a . 1) ("b" 2 3))

Sometimes it is better to design an alist to store the associated value in the CAR of the CDR of the element. Here is an example:

'((rose red) (lily white) (buttercup yellow)))

Here we regard red as the value associated with rose. One advantage of this method is that you can store other related information--even a list of other items--in the CDR of the CDR. One disadvantage is that you cannot use rassq (see below) to find the element containing a given value. When neither of these considerations is important, the choice is a matter of taste, as long as you are consistent about it for any given alist.

Note that the same alist shown above could be regarded as having the associated value in the CDR of the element; the value associated with rose would be the list (red).

Association lists are often used to record information that you might otherwise keep on a stack, since new associations may be added easily to the front of the list. When searching an association list for an association with a given key, the first one found is returned, if there is more than one.

In Emacs Lisp, it is not an error if an element of an association list is not a cons cell. The alist search functions simply ignore such elements. Many other versions of Lisp signal errors in such cases.

Note that property lists are similar to association lists in several respects. A property list behaves like an association list in which each key can occur only once. See section Property Lists, for a comparison of property lists and association lists.

Function: assoc key alist

This function returns the first association for key in alist. It compares key against the alist elements using equal (see section Equality Predicates). It returns nil if no association in alist has a CAR equal to key. For example:

(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
     => ((pine . cones) (oak . acorns) (maple . seeds))
(assoc 'oak trees)
     => (oak . acorns)
(cdr (assoc 'oak trees))
     => acorns
(assoc 'birch trees)
     => nil

Here is another example in which the keys and values are not symbols:

(setq needles-per-cluster
      '((2 . ("Austrian Pine" "Red Pine"))
        (3 . "Pitch Pine")
        (5 . "White Pine")))

(cdr (assoc 3 needles-per-cluster))
     => "Pitch Pine"
(cdr (assoc 2 needles-per-cluster))
     => ("Austrian Pine" "Red Pine")

Function: assq key alist

This function is like assoc in that it returns the first association for key in alist, but it makes the comparison using eq instead of equal. assq returns nil if no association in alist has a CAR eq to key. This function is used more often than assoc, since eq is faster than equal and most alists use symbols as keys. See section Equality Predicates.

(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))

(assq 'pine trees)
     => (pine . cones)

On the other hand, assq is not usually useful in alists where the keys may not be symbols:

(setq leaves
      '(("simple leaves" . oak)
        ("compound leaves" . horsechestnut)))

(assq "simple leaves" leaves)
     => nil
(assoc "simple leaves" leaves)
     => ("simple leaves" . oak)

Function: rassq value alist

This function returns the first association with value value in alist. It returns nil if no association in alist has a CDR eq to value.

rassq is like assq except that the CDR of the alist associations is tested instead of the CAR. You can think of this as "reverse assq", finding the key for a given value.

For example:

(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))

(rassq 'acorns trees)
     => (oak . acorns)
(rassq 'spores trees)
     => nil

Note that rassq cannot be used to search for a value stored in the CAR of the CDR of an element:

(setq colors '((rose red) (lily white) (buttercup yellow)))

(rassq 'white colors)
     => nil

In this case, the CDR of the association (lily white) is not the symbol white, but rather the list (white). This can be seen more clearly if the association is written in dotted pair notation:

(lily white) == (lily . (white))

Function: copy-alist alist

This function returns a two-level deep copy of alist: it creates a new copy of each association, so that you can alter the associations of the new alist without changing the old one.

(setq needles-per-cluster
      '((2 . ("Austrian Pine" "Red Pine"))
        (3 . "Pitch Pine")
        (5 . "White Pine")))
=>
((2 "Austrian Pine" "Red Pine")
 (3 . "Pitch Pine")
 (5 . "White Pine"))

(setq copy (copy-alist needles-per-cluster))
=>
((2 "Austrian Pine" "Red Pine")
 (3 . "Pitch Pine")
 (5 . "White Pine"))

(eq needles-per-cluster copy)
     => nil
(equal needles-per-cluster copy)
     => t
(eq (car needles-per-cluster) (car copy))
     => nil
(cdr (car (cdr needles-per-cluster)))
     => "Pitch Pine"
(eq (cdr (car (cdr needles-per-cluster)))
    (cdr (car (cdr copy))))
     => t

Sequences, Arrays, and Vectors

Recall that the sequence type is the union of three other Lisp types: lists, vectors, and strings. In other words, any list is a sequence, any vector is a sequence, and any string is a sequence. The common property that all sequences have is that each is an ordered collection of elements.

An array is a single primitive object directly containing all its elements. Therefore, all the elements are accessible in constant time. The length of an existing array cannot be changed. Both strings and vectors are arrays. A list is a sequence of elements, but it is not a single primitive object; it is made of cons cells, one cell per element. Therefore, elements farther from the beginning of the list take longer to access, but it is possible to add elements to the list or remove elements. The elements of vectors and lists may be any Lisp objects. The elements of strings are all characters.

The following diagram shows the relationship between these types:

            ___________________________________
           |                                   |
           |          Sequence                 |
           |  ______   ______________________  |
           | |      | |                      | |
           | | List | |         Array        | |
           | |      | |  ________   _______  | |   
           | |______| | |        | |       | | |
           |          | | String | | Vector| | |
           |          | |________| |_______| | |
           |          |______________________| |
           |___________________________________|

The Relationship between Sequences, Arrays, and Vectors

Sequences

In Emacs Lisp, a sequence is either a list, a vector or a string. The common property that all sequences have is that each is an ordered collection of elements. This section describes functions that accept any kind of sequence.

Function: sequencep object

Returns t if object is a list, vector, or string, nil otherwise.

Function: copy-sequence sequence

Returns a copy of sequence. The copy is the same type of object as the original sequence, and it has the same elements in the same order.

Storing a new element into the copy does not affect the original sequence, and vice versa. However, the elements of the new sequence are not copies; they are identical (eq) to the elements of the original. Therefore, changes made within these elements, as found via the copied sequence, are also visible in the original sequence.

If the sequence is a string with text properties, the property list in the copy is itself a copy, not shared with the original's property list. However, the actual values of the properties are shared. See section Text Properties.

See also append in section Building Cons Cells and Lists, concat in section Creating Strings, and vconcat in section Vectors, for others ways to copy sequences.

(setq bar '(1 2))
     => (1 2)
(setq x (vector 'foo bar))
     => [foo (1 2)]
(setq y (copy-sequence x))
     => [foo (1 2)]

(eq x y)
     => nil
(equal x y)
     => t
(eq (elt x 1) (elt y 1))
     => t

;; Replacing an element of one sequence.
(aset x 0 'quux)
x => [quux (1 2)]
y => [foo (1 2)]

;; Modifying the inside of a shared element.
(setcar (aref x 1) 69)
x => [quux (69 2)]
y => [foo (69 2)]

Function: length sequence

Returns the number of elements in sequence. If sequence is a cons cell that is not a list (because the final CDR is not nil), a wrong-type-argument error is signaled.

(length '(1 2 3))
    => 3
(length ())
    => 0
(length "foobar")
    => 6
(length [1 2 3])
    => 3

Function: elt sequence index

This function returns the element of sequence indexed by index. Legitimate values of index are integers ranging from 0 up to one less than the length of sequence. If sequence is a list, then out-of-range values of index return nil; otherwise, they produce an args-out-of-range error.

(elt [1 2 3 4] 2)
     => 3
(elt '(1 2 3 4) 2)
     => 3
(char-to-string (elt "1234" 2))
     => "3"
(elt [1 2 3 4] 4)
     error-->Args out of range: [1 2 3 4], 4
(elt [1 2 3 4] -1)
     error-->Args out of range: [1 2 3 4], -1

This function duplicates aref (see section Functions that Operate on Arrays) and nth (see section Accessing Elements of Lists), except that it works for any kind of sequence.

Arrays

An array object refers directly to a number of other Lisp objects, called the elements of the array. Any element of an array may be accessed in constant time. In contrast, an element of a list requires access time that is proportional to the position of the element in the list.

When you create an array, you must specify how many elements it has. The amount of space allocated depends on the number of elements. Therefore, it is impossible to change the size of an array once it is created. You cannot add or remove elements. However, you can replace an element with a different value.

Emacs defines two types of array, both of which are one-dimensional: strings and vectors. A vector is a general array; its elements can be any Lisp objects. A string is a specialized array; its elements must be characters (i.e., integers between 0 and 255). Each type of array has its own read syntax. See section String Type, and section Vector Type.

Both kinds of arrays share these characteristics:

In principle, if you wish to have an array of characters, you could use either a string or a vector. In practice, we always choose strings for such applications, for four reasons:

Functions that Operate on Arrays

In this section, we describe the functions that accept both strings and vectors.

Function: arrayp object

This function returns t if object is an array (i.e., either a vector or a string).

(arrayp [a])
=> t
(arrayp "asdf")
=> t

Function: aref array index

This function returns the indexth element of array. The first element is at index zero.

(setq primes [2 3 5 7 11 13])
     => [2 3 5 7 11 13]
(aref primes 4)
     => 11
(elt primes 4)
     => 11

(aref "abcdefg" 1)
     => 98           ; `b' is ASCII code 98.

See also the function elt, in section Sequences.

Function: aset array index object

This function sets the indexth element of array to be object. It returns object.

(setq w [foo bar baz])
     => [foo bar baz]
(aset w 0 'fu)
     => fu
w
     => [fu bar baz]

(setq x "asdfasfd")
     => "asdfasfd"
(aset x 3 ?Z)
     => 90
x
     => "asdZasfd"

If array is a string and object is not a character, a wrong-type-argument error results.

Function: fillarray array object

This function fills the array array with pointers to object, replacing any previous values. It returns array.

(setq a [a b c d e f g])
     => [a b c d e f g]
(fillarray a 0)
     => [0 0 0 0 0 0 0]
a
     => [0 0 0 0 0 0 0]
(setq s "When in the course")
     => "When in the course"
(fillarray s ?-)
     => "------------------"

If array is a string and object is not a character, a wrong-type-argument error results.

The general sequence functions copy-sequence and length are often useful for objects known to be arrays. See section Sequences.

Vectors

Arrays in Lisp, like arrays in most languages, are blocks of memory whose elements can be accessed in constant time. A vector is a general-purpose array; its elements can be any Lisp objects. (The other kind of array provided in Emacs Lisp is the string, whose elements must be characters.) The main uses of vectors in Emacs are as syntax tables (vectors of integers) and keymaps (vectors of commands). They are also used internally as part of the representation of a byte-compiled function; if you print such a function, you will see a vector in it.

The indices of the elements of a vector are numbered starting with zero in Emacs Lisp.

Vectors are printed with square brackets surrounding the elements in their order. Thus, a vector containing the symbols a, b and c is printed as [a b c]. You can write vectors in the same way in Lisp input.

A vector, like a string or a number, is considered a constant for evaluation: the result of evaluating it is the same vector. The elements of the vector are not evaluated. See section Self-Evaluating Forms.

Here are examples of these principles:

(setq avector [1 two '(three) "four" [five]])
     => [1 two (quote (three)) "four" [five]]
(eval avector)
     => [1 two (quote (three)) "four" [five]]
(eq avector (eval avector))
     => t

Here are some functions that relate to vectors:

Function: vectorp object

This function returns t if object is a vector.

(vectorp [a])
     => t
(vectorp "asdf")
     => nil

Function: vector &rest objects

This function creates and returns a vector whose elements are the arguments, objects.

(vector 'foo 23 [bar baz] "rats")
     => [foo 23 [bar baz] "rats"]
(vector)
     => []

Function: make-vector integer object

This function returns a new vector consisting of integer elements, each initialized to object.

(setq sleepy (make-vector 9 'Z))
     => [Z Z Z Z Z Z Z Z Z]

Function: vconcat &rest sequences

This function returns a new vector containing all the elements of the sequences. The arguments sequences may be lists, vectors, or strings. If no sequences are given, an empty vector is returned.

The value is a newly constructed vector that is not eq to any existing vector.

(setq a (vconcat '(A B C) '(D E F)))
     => [A B C D E F]
(eq a (vconcat a))
     => nil
(vconcat)
     => []
(vconcat [A B C] "aa" '(foo (6 7)))
     => [A B C 97 97 foo (6 7)]

When an argument is an integer (not a sequence of integers), it is converted to a string of digits making up the decimal printed representation of the integer. This special case exists for compatibility with Mocklisp, and we don't recommend you take advantage of it. If you want to convert an integer in this way, use format (see section Formatting Strings) or int-to-string (see section Conversion of Characters and Strings).

For other concatenation functions, see mapconcat in section Mapping Functions, concat in section Creating Strings, and append in section Building Cons Cells and Lists.

The append function may be used to convert a vector into a list with the same elements (see section Building Cons Cells and Lists):

(setq avector [1 two (quote (three)) "four" [five]])
     => [1 two (quote (three)) "four" [five]]
(append avector nil)
     => (1 two (quote (three)) "four" [five])

Symbols

A symbol is an object with a unique name. This chapter describes symbols, their components, and how they are created and interned. Property lists are also described. The uses of symbols as variables and as function names are described in separate chapters; see section Variables, and section Functions. For the precise syntax for symbols, see section Symbol Type.

You can test whether an arbitrary Lisp object is a symbol with symbolp:

Function: symbolp object

This function returns t if object is a symbol, nil otherwise.

Symbol Components

Each symbol has four components (or "cells"), each of which references another object:

Print name
The print name cell holds a string which names the symbol for reading and printing. See symbol-name in section Creating and Interning Symbols.

Value
The value cell holds the current value of the symbol as a variable. When a symbol is used as a form, the value of the form is the contents of the symbol's value cell. See symbol-value in section Accessing Variable Values.

Function
The function cell holds the function definition of the symbol. When a symbol is used as a function, its function definition is used in its place. This cell is also used to make a symbol stand for a keymap or a keyboard macro, for editor command execution. Because each symbol has separate value and function cells, variables and function names do not conflict. See symbol-function in section Accessing Function Cell Contents.

Property list
The property list cell holds the property list of the symbol. See symbol-plist in section Property Lists.

The print name cell always holds a string, and cannot be changed. The other three cells can be set individually to any specified Lisp object.

The print name cell holds the string that is the name of the symbol. Since symbols are represented textually by their names, it is important not to have two symbols with the same name. The Lisp reader ensures this: every time it reads a symbol, it looks for an existing symbol with the specified name before it creates a new one. (In GNU Emacs Lisp, this is done with a hashing algorithm that uses an obarray; see section Creating and Interning Symbols.)

In normal usage, the function cell usually contains a function or macro, as that is what the Lisp interpreter expects to see there (see section Evaluation). Keyboard macros (see section Keyboard Macros), keymaps (see section Keymaps) and autoload objects (see section Autoloading) are also sometimes stored in the function cell of symbols. We often refer to "the function foo" when we really mean the function stored in the function cell of the symbol foo. We make the distinction only when necessary.

Similarly, the property list cell normally holds a correctly formatted property list (see section Property Lists), as a number of functions expect to see a property list there.

The function cell or the value cell may be void, which means that the cell does not reference any object. (This is not the same thing as holding the symbol void, nor the same as holding the symbol nil.) Examining the value of a cell which is void results in an error, such as `Symbol's value as variable is void'.

The four functions symbol-name, symbol-value, symbol-plist, and symbol-function return the contents of the four cells. Here as an example we show the contents of the four cells of the symbol buffer-file-name:

(symbol-name 'buffer-file-name)
     => "buffer-file-name"
(symbol-value 'buffer-file-name)
     => "/gnu/elisp/symbols.texi"
(symbol-plist 'buffer-file-name)
     => (variable-documentation 29529)
(symbol-function 'buffer-file-name)
     => #<subr buffer-file-name>

Because this symbol is the variable which holds the name of the file being visited in the current buffer, the value cell contents we see are the name of the source file of this chapter of the Emacs Lisp Manual. The property list cell contains the list (variable-documentation 29529) which tells the documentation functions where to find documentation about buffer-file-name in the `DOC' file. (29529 is the offset from the beginning of the `DOC' file where the documentation for the function begins.) The function cell contains the function for returning the name of the file. buffer-file-name names a primitive function, which has no read syntax and prints in hash notation (see section Primitive Function Type). A symbol naming a function written in Lisp would have a lambda expression (or a byte-code object) in this cell.

Defining Symbols

A definition in Lisp is a special form that announces your intention to use a certain symbol in a particular way. In Emacs Lisp, you can define a symbol as a variable, or define it as a function (or macro), or both independently.

A definition construct typically specifies a value or meaning for the symbol for one kind of use, plus documentation for its meaning when used in this way. Thus, when you define a symbol as a variable, you can supply an initial value for the variable, plus documentation for the variable.

defvar and defconst are special forms that define a symbol as a global variable. They are documented in detail in section Defining Global Variables.

defun defines a symbol as a function, creating a lambda expression and storing it in the function cell of the symbol. This lambda expression thus becomes the function definition of the symbol. (The term "function definition", meaning the contents of the function cell, is derived from the idea that defun gives the symbol its definition as a function.) See section Functions.

defmacro defines a symbol as a macro. It creates a macro object and stores it in the function cell of the symbol. Note that a given symbol can be a macro or a function, but not both at once, because both macro and function definitions are kept in the function cell, and that cell can hold only one Lisp object at any given time. See section Macros.

In GNU Emacs Lisp, a definition is not required in order to use a symbol as a variable or function. Thus, you can make a symbol a global variable with setq, whether you define it first or not. The real purpose of definitions is to guide programmers and programming tools. They inform programmers who read the code that certain symbols are intended to be used as variables, or as functions. In addition, utilities such as `etags' and `make-docfile' can recognize definitions, and add the appropriate information to tag tables and the `emacs/etc/DOC-version' file. See section Access to Documentation Strings.

Creating and Interning Symbols

To understand how symbols are created in GNU Emacs Lisp, you must know how Lisp reads them. Lisp must ensure that it finds the same symbol every time it reads the same set of characters. Failure to do so would cause complete confusion.

When the Lisp reader encounters a symbol, it reads all the characters of the name. Then it "hashes" those characters to find an index in a table called an obarray. Hashing is an efficient method of looking something up. For example, instead of searching a telephone book cover to cover when looking up Jan Jones, you start with the J's and go from there. That is a simple version of hashing. Each element of the obarray is a bucket which holds all the symbols with a given hash code; to look for a given name, it is sufficient to look through all the symbols in the bucket for that name's hash code.

If a symbol with the desired name is found, then it is used. If no such symbol is found, then a new symbol is created and added to the obarray bucket. Adding a symbol to an obarray is called interning it, and the symbol is then called an interned symbol. In Emacs Lisp, a symbol may be interned in only one obarray--if you try to intern the same symbol in more than one obarray, you will get unpredictable results.

It is possible for two different symbols to have the same name in different obarrays; these symbols are not eq or equal. However, this normally happens only as part of abbrev definition (see section Abbrevs And Abbrev Expansion).

Common Lisp note: in Common Lisp, a symbol may be interned in several obarrays at once.

If a symbol is not in the obarray, then there is no way for Lisp to find it when its name is read. Such a symbol is called an uninterned symbol relative to the obarray. An uninterned symbol has all the other characteristics of symbols.

In Emacs Lisp, an obarray is represented as a vector. Each element of the vector is a bucket; its value is either an interned symbol whose name hashes to that bucket, or 0 if the bucket is empty. Each interned symbol has an internal link (invisible to the user) to the next symbol in the bucket. Because these links are invisible, there is no way to scan the symbols in an obarray except using mapatoms (below). The order of symbols in a bucket is not significant.

In an empty obarray, every element is 0, and you can create an obarray with (make-vector length 0). This is the only valid way to create an obarray. Prime numbers as lengths tend to result in good hashing; lengths one less than a power of two are also good.

Do not try to create an obarray that is not empty. This does not work--only intern can enter a symbol in an obarray properly. Also, don't try to put into an obarray of your own a symbol that is already interned in the main obarray, because in Emacs Lisp a symbol cannot be in two obarrays at once.

Most of the functions below take a name and sometimes an obarray as arguments. A wrong-type-argument error is signaled if the name is not a string, or if the obarray is not a vector.

Function: symbol-name symbol

This function returns the string that is symbol's name. For example:

(symbol-name 'foo)
     => "foo"

Changing the string by substituting characters, etc, does change the name of the symbol, but fails to update the obarray, so don't do it!

Function: make-symbol name

This function returns a newly-allocated, uninterned symbol whose name is name (which must be a string). Its value and function definition are void, and its property list is nil. In the example below, the value of sym is not eq to foo because it is a distinct uninterned symbol whose name is also `foo'.

(setq sym (make-symbol "foo"))
     => foo
(eq sym 'foo)
     => nil

Function: intern name &optional obarray

This function returns the interned symbol whose name is name. If there is no such symbol in the obarray, a new one is created, added to the obarray, and returned. If obarray is supplied, it specifies the obarray to use; otherwise, the value of the global variable obarray is used.

(setq sym (intern "foo"))
     => foo
(eq sym 'foo)
     => t

(setq sym1 (intern "foo" other-obarray))
     => foo
(eq sym 'foo)
     => nil

Function: intern-soft name &optional obarray

This function returns the symbol whose name is name, or nil if a symbol with that name is not found in the obarray. Therefore, you can use intern-soft to test whether a symbol with a given name is interned. If obarray is supplied, it specifies the obarray to use; otherwise the value of the global variable obarray is used.

(intern-soft "frazzle")        ; No such symbol exists.
     => nil
(make-symbol "frazzle")        ; Create an uninterned one.
     => frazzle
(intern-soft "frazzle")        ; That one cannot be found.
     => nil
(setq sym (intern "frazzle"))  ; Create an interned one.
     => frazzle
(intern-soft "frazzle")        ; That one can be found!
     => frazzle
(eq sym 'frazzle)              ; And it is the same one.
     => t

Variable: obarray

This variable is the standard obarray for use by intern and read.

Function: mapatoms function &optional obarray

This function applies function to every symbol in obarray. It returns nil. If obarray is not supplied, it defaults to the value of obarray, the standard obarray for ordinary symbols.

(setq count 0)
     => 0
(defun count-syms (s)
  (setq count (1+ count)))
     => count-syms
(mapatoms 'count-syms)
     => nil
count
     => 1871

See documentation in section Access to Documentation Strings, for another example using mapatoms.

Property Lists

A property list (plist for short) is a list of paired elements stored in the property list cell of a symbol. Each of the pairs associates a property name (usually a symbol) with a property or value. Property lists are generally used to record information about a symbol, such as how to compile it, the name of the file where it was defined, or perhaps even the grammatical class of the symbol (representing a word) in a language understanding system.

Character positions in a string or buffer can also have property lists. See section Text Properties.

The property names and values in a property list can be any Lisp objects, but the names are usually symbols. They are compared using eq. Here is an example of a property list, found on the symbol progn when the compiler is loaded:

(lisp-indent-function 0 byte-compile byte-compile-progn)

Here lisp-indent-function and byte-compile are property names, and the other two elements are the corresponding values.

Association lists (see section Association Lists) are very similar to property lists. In contrast to association lists, the order of the pairs in the property list is not significant since the property names must be distinct.

Property lists are better than association lists when it is necessary to attach information to various Lisp function names or variables. If all the pairs are recorded in one association list, the program will need to search that entire list each time a function or variable is to be operated on. By contrast, if the information is recorded in the property lists of the function names or variables themselves, each search will scan only the length of one property list, which is usually short. For this reason, the documentation for a variable is recorded in a property named variable-documentation. The byte compiler likewise uses properties to record those functions needing special treatment.

However, association lists have their own advantages. Depending on your application, it may be faster to add an association to the front of an association list than to update a property. All properties for a symbol are stored in the same property list, so there is a possibility of a conflict between different uses of a property name. (For this reason, it is a good idea to use property names that are probably unique, such as by including the name of the library in the property name.) An association list may be used like a stack where associations are pushed on the front of the list and later discarded; this is not possible with a property list.

Function: symbol-plist symbol

This function returns the property list of symbol.

Function: setplist symbol plist

This function sets symbol's property list to plist. Normally, plist should be a well-formed property list, but this is not enforced.

(setplist 'foo '(a 1 b (2 3) c nil))
     => (a 1 b (2 3) c nil)
(symbol-plist 'foo)
     => (a 1 b (2 3) c nil)

For symbols in special obarrays, which are not used for ordinary purposes, it may make sense to use the property list cell in a nonstandard fashion; in fact, the abbrev mechanism does so (see section Abbrevs And Abbrev Expansion).

Function: get symbol property

This function finds the value of the property named property in symbol's property list. If there is no such property, nil is returned. Thus, there is no distinction between a value of nil and the absence of the property.

The name property is compared with the existing property names using eq, so any object is a legitimate property.

See put for an example.

Function: put symbol property value

This function puts value onto symbol's property list under the property name property, replacing any previous value.

(put 'fly 'verb 'transitive)
     =>'transitive
(put 'fly 'noun '(a buzzing little bug))
     => (a buzzing little bug)
(get 'fly 'verb)
     => transitive
(symbol-plist 'fly)
     => (verb transitive noun (a buzzing little bug))

Evaluation

The evaluation of expressions in Emacs Lisp is performed by the Lisp interpreter---a program that receives a Lisp object as input and computes its value as an expression. The value is computed in a fashion that depends on the data type of the object, following rules described in this chapter. The interpreter runs automatically to evaluate portions of your program, but can also be called explicitly via the Lisp primitive function eval.

A Lisp object which is intended for evaluation is called an expression or a form. The fact that expressions are data objects and not merely text is one of the fundamental differences between Lisp-like languages and typical programming languages. Any object can be evaluated, but in practice only numbers, symbols, lists and strings are evaluated very often.

It is very common to read a Lisp expression and then evaluate the expression, but reading and evaluation are separate activities, and either can be performed alone. Reading per se does not evaluate anything; it converts the printed representation of a Lisp object to the object itself. It is up to the caller of read whether this object is a form to be evaluated, or serves some entirely different purpose. See section Input Functions.

Do not confuse evaluation with command key interpretation. The editor command loop translates keyboard input into a command (an interactively callable function) using the active keymaps, and then uses call-interactively to invoke the command. The execution of the command itself involves evaluation if the command is written in Lisp, but that is not a part of command key interpretation itself. See section Command Loop.

Evaluation is a recursive process. That is, evaluation of a form may cause eval to be called again in order to evaluate parts of the form. For example, evaluation of a function call first evaluates each argument of the function call, and then evaluates each form in the function body. Consider evaluation of the form (car x): the subform x must first be evaluated recursively, so that its value can be passed as an argument to the function car.

The evaluation of forms takes place in a context called the environment, which consists of the current values and bindings of all Lisp variables.(1) Whenever the form refers to a variable without creating a new binding for it, the value of the binding in the current environment is used. See section Variables.

Evaluation of a form may create new environments for recursive evaluation by binding variables (see section Local Variables). These environments are temporary and will be gone by the time evaluation of the form is complete. The form may also make changes that persist; these changes are called side effects. An example of a form that produces side effects is (setq foo 1).

Finally, evaluation of one particular function call, byte-code, invokes the byte-code interpreter on its arguments. Although the byte-code interpreter is not the same as the Lisp interpreter, it uses the same environment as the Lisp interpreter, and may on occasion invoke the Lisp interpreter. (See section Byte Compilation.)

The details of what evaluation means for each kind of form are described below (see section Kinds of Forms).

Eval

Most often, forms are evaluated automatically, by virtue of their occurrence in a program being run. On rare occasions, you may need to write code that evaluates a form that is computed at run time, such as after reading a form from text being edited or getting one from a property list. On these occasions, use the eval function.

The functions and variables described in this section evaluate forms, specify limits to the evaluation process, or record recently returned values. Loading a file also does evaluation (see section Loading).

Function: eval form

This is the basic function for performing evaluation. It evaluates form in the current environment and returns the result. How the evaluation proceeds depends on the type of the object (see section Kinds of Forms).

Since eval is a function, the argument expression that appears in a call to eval is evaluated twice: once as preparation before eval is called, and again by the eval function itself. Here is an example:

(setq foo 'bar)
     => bar
(setq bar 'baz)
     => baz
;; eval receives argument bar, which is the value of foo
(eval foo)
     => baz

The number of currently active calls to eval is limited to max-lisp-eval-depth (see below).

Command: eval-current-buffer &optional stream

This function evaluates the forms in the current buffer. It reads forms from the buffer and calls eval on them until the end of the buffer is reached, or until an error is signaled and not handled.

If stream is supplied, the variable standard-output is bound to stream during the evaluation (see section Output Functions).

eval-current-buffer always returns nil.

Command: eval-region start end &optional stream

This function evaluates the forms in the current buffer in the region defined by the positions start and end. It reads forms from the region and calls eval on them until the end of the region is reached, or until an error is signaled and not handled.

If stream is supplied, standard-output is bound to it for the duration of the command.

eval-region always returns nil.

Variable: max-lisp-eval-depth

This variable defines the maximum depth allowed in calls to eval, apply, and funcall before an error is signaled (with error message "Lisp nesting exceeds max-lisp-eval-depth"). eval is called recursively to evaluate the arguments of Lisp function calls and to evaluate bodies of functions.

This limit, with the associated error when it is exceeded, is one way that Lisp avoids infinite recursion on an ill-defined function.

The default value of this variable is 200. If you set it to a value less than 100, Lisp will reset it to 100 if the given value is reached.

max-specpdl-size provides another limit on nesting. See section Local Variables.

Variable: values

The value of this variable is a list of values returned by all expressions which were read from buffers (including the minibuffer), evaluated, and printed. The elements are in order, most recent first.

(setq x 1)
     => 1
(list 'A (1+ 2) auto-save-default)
     => (A 3 t)
values
     => ((A 3 t) 1 ...)

This variable is useful for referring back to values of forms recently evaluated. It is generally a bad idea to print the value of values itself, since this may be very long. Instead, examine particular elements, like this:

;; Refer to the most recent evaluation result.
(nth 0 values)
     => (A 3 t)
;; That put a new element on,
;;   so all elements move back one.
(nth 1 values)
     => (A 3 t)
;; This gets the element that was next-to-last
;;   before this example.
(nth 3 values)
     => 1

Kinds of Forms

A Lisp object that is intended to be evaluated is called a form. How Emacs evaluates a form depends on its data type. Emacs has three different kinds of form that are evaluated differently: symbols, lists, and "all other types". All three kinds are described in this section, starting with "all other types" which are self-evaluating forms.

Self-Evaluating Forms

A self-evaluating form is any form that is not a list or symbol. Self-evaluating forms evaluate to themselves: the result of evaluation is the same object that was evaluated. Thus, the number 25 evaluates to 25, and the string "foo" evaluates to the string "foo". Likewise, evaluation of a vector does not cause evaluation of the elements of the vector--it returns the same vector with its contents unchanged.

'123               ; An object, shown without evaluation.
     => 123
123                ; Evaluated as usual--result is the same.
     => 123
(eval '123)        ; Evaluated "by hand"---result is the same.
     => 123
(eval (eval '123)) ; Evaluating twice changes nothing.
     => 123

It is common to write numbers, characters, strings, and even vectors in Lisp code, taking advantage of the fact that they self-evaluate. However, it is quite unusual to do this for types that lack a read syntax, because it is inconvenient and not very useful; however, it is possible to put them inside Lisp programs when they are constructed from subexpressions rather than read. Here is an example:

;; Build such an expression.
(setq buffer (list 'print (current-buffer)))
     => (print #<buffer eval.texi>)
;; Evaluate it.
(eval buffer)
     -| #<buffer eval.texi>
     => #<buffer eval.texi>

Symbol Forms

When a symbol is evaluated, it is treated as a variable. The result is the variable's value, if it has one. If it has none (if its value cell is void), an error is signaled. For more information on the use of variables, see section Variables.

In the following example, we set the value of a symbol with setq. When the symbol is later evaluated, that value is returned.

(setq a 123)
     => 123
(eval 'a)
     => 123
a
     => 123

The symbols nil and t are treated specially, so that the value of nil is always nil, and the value of t is always t. Thus, these two symbols act like self-evaluating forms, even though eval treats them like any other symbol.

Classification of List Forms

A form that is a nonempty list is either a function call, a macro call, or a special form, according to its first element. These three kinds of forms are evaluated in different ways, described below. The rest of the list consists of arguments for the function, macro or special form.

The first step in evaluating a nonempty list is to examine its first element. This element alone determines what kind of form the list is and how the rest of the list is to be processed. The first element is not evaluated, as it would be in some Lisp dialects including Scheme.

Symbol Function Indirection

If the first element of the list is a symbol then evaluation examines the symbol's function cell, and uses its contents instead of the original symbol. If the contents are another symbol, this process, called symbol function indirection, is repeated until a non-symbol is obtained. See section Naming a Function, for more information about using a symbol as a name for a function stored in the function cell of the symbol.

One possible consequence of this process is an infinite loop, in the event that a symbol's function cell refers to the same symbol. Or a symbol may have a void function cell, causing a void-function error. But if neither of these things happens, we eventually obtain a non-symbol, which ought to be a function or other suitable object.

More precisely, we should now have a Lisp function (a lambda expression), a byte-code function, a primitive function, a Lisp macro, a special form, or an autoload object. Each of these types is a case described in one of the following sections. If the object is not one of these types, the error invalid-function is signaled.

The following example illustrates the symbol indirection process. We use fset to set the function cell of a symbol and symbol-function to get the function cell contents (see section Accessing Function Cell Contents). Specifically, we store the symbol car into the function cell of first, and the symbol first into the function cell of erste.

;; Build this function cell linkage:
;;   -------------       -----        -------        -------
;;  | #<subr car> | <-- | car |  <-- | first |  <-- | erste |
;;   -------------       -----        -------        -------

(symbol-function 'car)
     => #<subr car>
(fset 'first 'car)
     => car
(fset 'erste 'first)
     => first
(erste '(1 2 3))   ; Call the function referenced by erste.
     => 1

By contrast, the following example calls a function without any symbol function indirection, because the first element is an anonymous Lisp function, not a symbol.

((lambda (arg) (erste arg))
 '(1 2 3)) 
     => 1

After that function is called, its body is evaluated; this does involve symbol function indirection when calling erste.

The built-in function indirect-function provides an easy way to perform symbol function indirection explicitly.

Function: indirect-function function

This function returns the meaning of function as a function. If function is a symbol, then it finds function's function definition and starts over with that value. If function is not a symbol, then it returns function itself.

Here is how you could define indirect-function in Lisp:

(defun indirect-function (function)
  (if (symbolp function)
      (indirect-function (symbol-function function))
    function))

Evaluation of Function Forms

If the first element of a list being evaluated is a Lisp function object, byte-code object or primitive function object, then that list is a function call. For example, here is a call to the function +:

(+ 1 x)

When a function call is evaluated, the first step is to evaluate the remaining elements of the list in the order they appear. The results are the actual argument values, one argument from each element. Then the function is called with this list of arguments, effectively using the function apply (see section Calling Functions). If the function is written in Lisp, the arguments are used to bind the argument variables of the function (see section Lambda Expressions); then the forms in the function body are evaluated in order, and the result of the last one is used as the value of the function call.

Lisp Macro Evaluation

If the first element of a list being evaluated is a macro object, then the list is a macro call. When a macro call is evaluated, the elements of the rest of the list are not initially evaluated. Instead, these elements themselves are used as the arguments of the macro. The macro definition computes a replacement form, called the expansion of the macro, which is evaluated in place of the original form. The expansion may be any sort of form: a self-evaluating constant, a symbol or a list. If the expansion is itself a macro call, this process of expansion repeats until some other sort of form results.

Normally, the argument expressions are not evaluated as part of computing the macro expansion, but instead appear as part of the expansion, so they are evaluated when the expansion is evaluated.

For example, given a macro defined as follows:

(defmacro cadr (x)
  (list 'car (list 'cdr x)))

an expression such as (cadr (assq 'handler list)) is a macro call, and its expansion is:

(car (cdr (assq 'handler list)))

Note that the argument (assq 'handler list) appears in the expansion.

See section Macros, for a complete description of Emacs Lisp macros.

Special Forms

A special form is a primitive function specially marked so that its arguments are not all evaluated. Special forms define control structures or perform variable bindings--things which functions cannot do.

Each special form has its own rules for which arguments are evaluated and which are used without evaluation. Whether a particular argument is evaluated may depend on the results of evaluating other arguments.

Here is a list, in alphabetical order, of all of the special forms in Emacs Lisp with a reference to where each is described.

and
see section Constructs for Combining Conditions

catch
see section Explicit Nonlocal Exits: catch and throw

cond
see section Conditionals

condition-case
see section Writing Code to Handle Errors

defconst
see section Defining Global Variables

defmacro
see section Defining Macros

defun
see section Defining Named Functions

defvar
see section Defining Global Variables

function
see section Anonymous Functions

if
see section Conditionals

interactive
see section Interactive Call

let
let*
see section Local Variables

or
see section Constructs for Combining Conditions

prog1
prog2
progn
see section Sequencing

quote
see section Quoting

save-excursion
see section Excursions

save-restriction
see section Narrowing

save-window-excursion
see section Window Configurations

setq
see section How to Alter a Variable Value

setq-default
see section Creating and Destroying Buffer-local Bindings

track-mouse
see section Mouse Tracking

unwind-protect
see section Nonlocal Exits

while
see section Iteration

with-output-to-temp-buffer
see section Temporary Displays

Common Lisp note: here are some comparisons of special forms in GNU Emacs Lisp and Common Lisp. setq, if, and catch are special forms in both Emacs Lisp and Common Lisp. defun is a special form in Emacs Lisp, but a macro in Common Lisp. save-excursion is a special form in Emacs Lisp, but doesn't exist in Common Lisp. throw is a special form in Common Lisp (because it must be able to throw multiple values), but it is a function in Emacs Lisp (which doesn't have multiple values).

Autoloading

The autoload feature allows you to call a function or macro whose function definition has not yet been loaded into Emacs. When an autoload object appears as a symbol's function definition and that symbol is used as a function, Emacs will automatically install the real definition (plus other associated code) and then call that definition. (See section Autoload.)

Quoting

The special form quote returns its single argument "unchanged".

Special Form: quote object

This special form returns object, without evaluating it. This allows symbols and lists, which would normally be evaluated, to be included literally in a program. (It is not necessary to quote numbers, strings, and vectors since they are self-evaluating.)

Because quote is used so often in programs, Lisp provides a convenient read syntax for it. An apostrophe character (`'') followed by a Lisp object (in read syntax) expands to a list whose first element is quote, and whose second element is the object. Thus, the read syntax 'x is an abbreviation for (quote x).

Here are some examples of expressions that use quote:

(quote (+ 1 2))
     => (+ 1 2)
(quote foo)
     => foo
'foo
     => foo
"foo
     => (quote foo)
'(quote foo)
     => (quote foo)
['foo]
     => [(quote foo)]

Other quoting constructs include function (see section Anonymous Functions), which causes an anonymous lambda expression written in Lisp to be compiled, and ` (see section Backquote), which is used to quote only part of a list, while computing and substituting other parts.

Control Structures

A Lisp program consists of expressions or forms (see section Kinds of Forms). We control the order of execution of the forms by enclosing them in control structures. Control structures are special forms which control when, whether, or how many times to execute the forms they contain.

The simplest control structure is sequential execution: first form a, then form b, and so on. This is what happens when you write several forms in succession in the body of a function, or at top level in a file of Lisp code--the forms are executed in the order they are written. We call this textual order. For example, if a function body consists of two forms a and b, evaluation of the function evaluates first a and then b, and the function's value is the value of b.

Naturally, Emacs Lisp has many kinds of control structures, including other varieties of sequencing, function calls, conditionals, iteration, and (controlled) jumps. The built-in control structures are special forms since their subforms are not necessarily evaluated. You can use macros to define your own control structure constructs (see section Macros).

Sequencing

Evaluating forms in the order they are written is the most common control structure. Sometimes this happens automatically, such as in a function body. Elsewhere you must use a control structure construct to do this: progn, the simplest control construct of Lisp.

A progn special form looks like this:

(progn a b c ...)

and it says to execute the forms a, b, c and so on, in that order. These forms are called the body of the progn form. The value of the last form in the body becomes the value of the entire progn.

When Lisp was young, progn was the only way to execute two or more forms in succession and use the value of the last of them. But programmers found they often needed to use a progn in the body of a function, where (at that time) only one form was allowed. So the body of a function was made into an "implicit progn": several forms are allowed just as in the body of an actual progn. Many other control structures likewise contain an implicit progn. As a result, progn is not used as often as it used to be. It is needed now most often inside of an unwind-protect, and, or or.

Special Form: progn forms...

This special form evaluates all of the forms, in textual order, returning the result of the final form.

(progn (print "The first form")
       (print "The second form")
       (print "The third form"))
     -| "The first form"
     -| "The second form"
     -| "The third form"
=> "The third form"

Two other control constructs likewise evaluate a series of forms but return a different value:

Special Form: prog1 form1 forms...

This special form evaluates form1 and all of the forms, in textual order, returning the result of form1.

(prog1 (print "The first form")
       (print "The second form")
       (print "The third form"))
     -| "The first form"
     -| "The second form"
     -| "The third form"
=> "The first form"

Here is a way to remove the first element from a list in the variable x, then return the value of that former element:

(prog1 (car x) (setq x (cdr x)))

Special Form: prog2 form1 form2 forms...

This special form evaluates form1, form2, and all of the following forms, in textual order, returning the result of form2.

(prog2 (print "The first form")
       (print "The second form")
       (print "The third form"))
     -| "The first form"
     -| "The second form"
     -| "The third form"
=> "The second form"

Conditionals

Conditional control structures choose among alternatives. Emacs Lisp has two conditional forms: if, which is much the same as in other languages, and cond, which is a generalized case statement.

Special Form: if condition then-form else-forms...

if chooses between the then-form and the else-forms based on the value of condition. If the evaluated condition is non-nil, then-form is evaluated and the result returned. Otherwise, the else-forms are evaluated in textual order, and the value of the last one is returned. (The else part of if is an example of an implicit progn. See section Sequencing.)

If condition has the value nil, and no else-forms are given, if returns nil.

if is a special form because the branch which is not selected is never evaluated--it is ignored. Thus, in the example below, true is not printed because print is never called.

(if nil 
    (print 'true) 
  'very-false)
=> very-false

Special Form: cond clause...

cond chooses among an arbitrary number of alternatives. Each clause in the cond must be a list. The CAR of this list is the condition; the remaining elements, if any, the body-forms. Thus, a clause looks like this:

(condition body-forms...)

cond tries the clauses in textual order, by evaluating the condition of each clause. If the value of condition is non-nil, the body-forms are evaluated, and the value of the last of body-forms becomes the value of the cond. The remaining clauses are ignored.

If the value of condition is nil, the clause "fails", so the cond moves on to the following clause, trying its condition.

If every condition evaluates to nil, so that every clause fails, cond returns nil.

A clause may also look like this:

(condition)

Then, if condition is non-nil when tested, the value of condition becomes the value of the cond form.

The following example has four clauses, which test for the cases where the value of x is a number, string, buffer and symbol, respectively:

(cond ((numberp x) x)
      ((stringp x) x)
      ((bufferp x)
       (setq temporary-hack x) ; multiple body-forms
       (buffer-name x))        ; in one clause
      ((symbolp x) (symbol-value x)))

Often we want the last clause to be executed whenever none of the previous clauses was successful. To do this, we use t as the condition of the last clause, like this: (t body-forms). The form t evaluates to t, which is never nil, so this clause never fails, provided the cond gets to it at all.

For example,

(cond ((eq a 1) 'foo)
      (t "default"))
=> "default"

This expression is a cond which returns foo if the value of a is 1, and returns the string "default" otherwise.

Both cond and if can usually be written in terms of the other. Therefore, the choice between them is a matter of taste and style. For example:

(if a b c)
==
(cond (a b) (t c))

Constructs for Combining Conditions

This section describes three constructs that are often used together with if and cond to express complicated conditions. The constructs and and or can also be used individually as kinds of multiple conditional constructs.

Function: not condition

This function tests for the falsehood of condition. It returns t if condition is nil, and nil otherwise. The function not is identical to null, and we recommend using null if you are testing for an empty list.

Special Form: and conditions...

The and special form tests whether all the conditions are true. It works by evaluating the conditions one by one in the order written.

If any of the conditions evaluates to nil, then the result of the and must be nil regardless of the remaining conditions; so the remaining conditions are ignored and the and returns right away.

If all the conditions turn out non-nil, then the value of the last of them becomes the value of the and form.

Here is an example. The first condition returns the integer 1, which is not nil. Similarly, the second condition returns the integer 2, which is not nil. The third condition is nil, so the remaining condition is never evaluated.

(and (print 1) (print 2) nil (print 3))
     -| 1
     -| 2
=> nil

Here is a more realistic example of using and:

(if (and (consp foo) (eq (car foo) 'x))
    (message "foo is a list starting with x"))

Note that (car foo) is not executed if (consp foo) returns nil, thus avoiding an error.

and can be expressed in terms of either if or cond. For example:

(and arg1 arg2 arg3)
==
(if arg1 (if arg2 arg3))
==
(cond (arg1 (cond (arg2 arg3))))

Special Form: or conditions...

The or special form tests whether at least one of the conditions is true. It works by evaluating all the conditions one by one in the order written.

If any of the conditions evaluates to a non-nil value, then the result of the or must be non-nil; so the remaining conditions are ignored and the or returns right away. The value it returns is the non-nil value of the condition just evaluated.

If all the conditions turn out nil, then the or expression returns nil.

For example, this expression tests whether x is either 0 or nil:

(or (eq x nil) (= x 0))

Like the and construct, or can be written in terms of cond. For example:

(or arg1 arg2 arg3)
==
(cond (arg1)
      (arg2)
      (arg3))

You could almost write or in terms of if, but not quite:

(if arg1 arg1
  (if arg2 arg2 
    arg3))

This is not completely equivalent because it can evaluate arg1 or arg2 twice. By contrast, (or arg1 arg2 arg3) never evaluates any argument more than once.

Iteration

Iteration means executing part of a program repetitively. For example, you might want to repeat some expressions once for each element of a list, or once for each integer from 0 to n. You can do this in Emacs Lisp with the special form while:

Special Form: while condition forms...

while first evaluates condition. If the result is non-nil, it evaluates forms in textual order. Then it reevaluates condition, and if the result is non-nil, it evaluates forms again. This process repeats until condition evaluates to nil.

There is no limit on the number of iterations that may occur. The loop will continue until either condition evaluates to nil or until an error or throw jumps out of it (see section Nonlocal Exits).

The value of a while form is always nil.

(setq num 0)
     => 0
(while (< num 4)
  (princ (format "Iteration %d." num))
  (setq num (1+ num)))
     -| Iteration 0.
     -| Iteration 1.
     -| Iteration 2.
     -| Iteration 3.
     => nil

If you would like to execute something on each iteration before the end-test, put it together with the end-test in a progn as the first argument of while, as shown here:

(while (progn
         (forward-line 1)
         (not (looking-at "^$"))))

This moves forward one line and continues moving by lines until an empty line is reached.

Nonlocal Exits

A nonlocal exit is a transfer of control from one point in a program to another remote point. Nonlocal exits can occur in Emacs Lisp as a result of errors; you can also use them under explicit control. Nonlocal exits unbind all variable bindings made by the constructs being exited.

Explicit Nonlocal Exits: catch and throw

Most control constructs affect only the flow of control within the construct itself. The function throw is the exception to this rule for of normal program execution: it performs a nonlocal exit on request. (There are other exceptions, but they are for error handling only.) throw is used inside a catch, and jumps back to that catch. For example:

(catch 'foo
  (progn
    ...
      (throw 'foo t)
    ...))

The throw transfers control straight back to the corresponding catch, which returns immediately. The code following the throw is not executed. The second argument of throw is used as the return value of the catch.

The throw and the catch are matched through the first argument: throw searches for a catch whose first argument is eq to the one specified. Thus, in the above example, the throw specifies foo, and the catch specifies the same symbol, so that catch is applicable. If there is more than one applicable catch, the innermost one takes precedence.

All Lisp constructs between the catch and the throw, including function calls, are exited automatically along with the catch. When binding constructs such as let or function calls are exited in this way, the bindings are unbound, just as they are when these constructs are exited normally (see section Local Variables). Likewise, the buffer and position saved by save-excursion (see section Excursions) are restored, and so is the narrowing status saved by save-restriction and the window selection saved by save-window-excursion (see section Window Configurations). Any cleanups established with the unwind-protect special form are executed if the unwind-protect is exited with a throw.

The throw need not appear lexically within the catch that it jumps to. It can equally well be called from another function called within the catch. As long as the throw takes place chronologically after entry to the catch, and chronologically before exit from it, it has access to that catch. This is why throw can be used in commands such as exit-recursive-edit which throw back to the editor command loop (see section Recursive Editing).

Common Lisp note: most other versions of Lisp, including Common Lisp, have several ways of transferring control nonsequentially: return, return-from, and go, for example. Emacs Lisp has only throw.

Special Form: catch tag body...

catch establishes a return point for the throw function. The return point is distinguished from other such return points by tag, which may be any Lisp object. The argument tag is evaluated normally before the return point is established.

With the return point in effect, the forms of the body are evaluated in textual order. If the forms execute normally, without error or nonlocal exit, the value of the last body form is returned from the catch.

If a throw is done within body specifying the same value tag, the catch exits immediately; the value it returns is whatever was specified as the second argument of throw.

Function: throw tag value

The purpose of throw is to return from a return point previously established with catch. The argument tag is used to choose among the various existing return points; it must be eq to the value specified in the catch. If multiple return points match tag, the innermost one is used.

The argument value is used as the value to return from that catch.

If no return point is in effect with tag tag, then a no-catch error is signaled with data (tag value).

Examples of catch and throw

One way to use catch and throw is to exit from a doubly nested loop. (In most languages, this would be done with a "go to".) Here we compute (foo i j) for i and j varying from 0 to 9:

(defun search-foo ()
  (catch 'loop
    (let ((i 0))
      (while (< i 10)
        (let ((j 0))
          (while (< j 10)
            (if (foo i j)
                (throw 'loop (list i j)))
            (setq j (1+ j))))
        (setq i (1+ i))))))

If foo ever returns non-nil, we stop immediately and return a list of i and j. If foo always returns nil, the catch returns normally, and the value is nil, since that is the result of the while.

Here are two tricky examples, slightly different, showing two return points at once. First, two return points with the same tag, hack:

(defun catch2 (tag)
  (catch tag
    (throw 'hack 'yes)))
=> catch2

(catch 'hack 
  (print (catch2 'hack))
  'no)
-| yes
=> no

Since both return points have tags that match the throw, it goes to the inner one, the one established in catch2. Therefore, catch2 returns normally with value yes, and this value is printed. Finally the second body form in the outer catch, which is 'no, is evaluated and returned from the outer catch.

Now let's change the argument given to catch2:

(defun catch2 (tag)
  (catch tag
    (throw 'hack 'yes)))
=> catch2

(catch 'hack
  (print (catch2 'quux))
  'no)
=> yes

We still have two return points, but this time only the outer one has the tag hack; the inner one has the tag quux instead. Therefore, the throw returns the value yes from the outer return point. The function print is never called, and the body-form 'no is never evaluated.

Errors

When Emacs Lisp attempts to evaluate a form that, for some reason, cannot be evaluated, it signals an error.

When an error is signaled, Emacs's default reaction is to print an error message and terminate execution of the current command. This is the right thing to do in most cases, such as if you type C-f at the end of the buffer.

In complicated programs, simple termination may not be what you want. For example, the program may have made temporary changes in data structures, or created temporary buffers which should be deleted before the program is finished. In such cases, you would use unwind-protect to establish cleanup expressions to be evaluated in case of error. Occasionally, you may wish the program to continue execution despite an error in a subroutine. In these cases, you would use condition-case to establish error handlers to recover control in case of error.

Resist the temptation to use error handling to transfer control from one part of the program to another; use catch and throw. See section Explicit Nonlocal Exits: catch and throw.

How to Signal an Error

Most errors are signaled "automatically" within Lisp primitives which you call for other purposes, such as if you try to take the CAR of an integer or move forward a character at the end of the buffer; you can also signal errors explicitly with the functions error and signal.

Quitting, which happens when the user types C-g, is not considered an error, but it handled almost like an error. See section Quitting.

Function: error format-string &rest args

This function signals an error with an error message constructed by applying format (see section Conversion of Characters and Strings) to format-string and args.

Typical uses of error is shown in the following examples:

(error "You have committed an error.  
        Try something else.")
     error--> You have committed an error.  
        Try something else.

(error "You have committed %d errors." 10)
     error--> You have committed 10 errors.  

error works by calling signal with two arguments: the error symbol error, and a list containing the string returned by format.

If you want to use a user-supplied string as an error message verbatim, don't just write (error string). If string contains `%', it will be interpreted as a format specifier, with undesirable results. Instead, use (error "%s" string).

Function: signal error-symbol data

This function signals an error named by error-symbol. The argument data is a list of additional Lisp objects relevant to the circumstances of the error.

The argument error-symbol must be an error symbol---a symbol bearing a property error-conditions whose value is a list of condition names. This is how different sorts of errors are classified.

The number and significance of the objects in data depends on error-symbol. For example, with a wrong-type-arg error, there are two objects in the list: a predicate which describes the type that was expected, and the object which failed to fit that type. See section Error Symbols and Condition Names, for a description of error symbols.

Both error-symbol and data are available to any error handlers which handle the error: a list (error-symbol . data) is constructed to become the value of the local variable bound in the condition-case form (see section Writing Code to Handle Errors). If the error is not handled, both of them are used in printing the error message.

The function signal never returns (though in older Emacs versions it could sometimes return).

(signal 'wrong-number-of-arguments '(x y))
     error--> Wrong number of arguments: x, y

(signal 'no-such-error '("My unknown error condition."))
     error--> peculiar error: "My unknown error condition."

Common Lisp note: Emacs Lisp has nothing like the Common Lisp concept of continuable errors.

How Emacs Processes Errors

When an error is signaled, Emacs searches for an active handler for the error. A handler is a specially marked place in the Lisp code of the current function or any of the functions by which it was called. If an applicable handler exists, its code is executed, and control resumes following the handler. The handler executes in the environment of the condition-case which established it; all functions called within that condition-case have already been exited, and the handler cannot return to them.

If no applicable handler is in effect in your program, the current command is terminated and control returns to the editor command loop, because the command loop has an implicit handler for all kinds of errors. The command loop's handler uses the error symbol and associated data to print an error message.

When an error is not handled explicitly, it may cause the Lisp debugger to be called. The debugger is enabled if the variable debug-on-error (see section Entering the Debugger on an Error) is non-nil. Unlike error handlers, the debugger runs in the environment of the error, so that you can examine values of variables precisely as they were at the time of the error.

Writing Code to Handle Errors

The usual effect of signaling an error is to terminate the command that is running and return immediately to the Emacs editor command loop. You can arrange to trap errors occurring in a part of your program by establishing an error handler with the special form condition-case. A simple example looks like this:

(condition-case nil
    (delete-file filename)
  (error nil))

This deletes the file named filename, catching any error and returning nil if an error occurs.

The second argument of condition-case is called the protected form. (In the example above, the protected form is a call to delete-file.) The error handlers go into effect when this form begins execution and are deactivated when this form returns. They remain in effect for all the intervening time. In particular, they are in effect during the execution of subroutines called by this form, and their subroutines, and so on. This is a good thing, since, strictly speaking, errors can be signaled only by Lisp primitives (including signal and error) called by the protected form, not by the protected form itself.

The arguments after the protected form are handlers. Each handler lists one or more condition names (which are symbols) to specify which errors it will handle. The error symbol specified when an error is signaled also defines a list of condition names. A handler applies to an error if they have any condition names in common. In the example above, there is one handler, and it specifies one condition name, error, which covers all errors.

The search for an applicable handler checks all the established handlers starting with the most recently established one. Thus, if two nested condition-case forms try to handle the same error, the inner of the two will actually handle it.

When an error is handled, control returns to the handler. Before this happens, Emacs unbinds all variable bindings made by binding constructs that are being exited and executes the cleanups of all unwind-protect forms that are exited. Once control arrives at the handler, the body of the handler is executed.

After execution of the handler body, execution continues by returning from the condition-case form. Because the protected form is exited completely before execution of the handler, the handler cannot resume execution at the point of the error, nor can it examine variable bindings that were made within the protected form. All it can do is clean up and proceed.

condition-case is often used to trap errors that are predictable, such as failure to open a file in a call to insert-file-contents. It is also used to trap errors that are totally unpredictable, such as when the program evaluates an expression read from the user.

Error signaling and handling have some resemblance to throw and catch, but they are entirely separate facilities. An error cannot be caught by a catch, and a throw cannot be handled by an error handler (though using throw when there is no suitable catch signals an error which can be handled).

Special Form: condition-case var protected-form handlers...

This special form establishes the error handlers handlers around the execution of protected-form. If protected-form executes without error, the value it returns becomes the value of the condition-case form; in this case, the condition-case has no effect. The condition-case form makes a difference when an error occurs during protected-form.

Each of the handlers is a list of the form (conditions body...). conditions is an error condition name to be handled, or a list of condition names; body is one or more Lisp expressions to be executed when this handler handles an error. Here are examples of handlers:

(error nil)

(arith-error (message "Division by zero"))

((arith-error file-error)
 (message
  "Either division by zero or failure to open a file"))

Each error that occurs has an error symbol which describes what kind of error it is. The error-conditions property of this symbol is a list of condition names (see section Error Symbols and Condition Names). Emacs searches all the active condition-case forms for a handler which specifies one or more of these names; the innermost matching condition-case handles the error. The handlers in this condition-case are tested in the order in which they appear.

The body of the handler is then executed, and the condition-case returns normally, using the value of the last form in the body as the overall value.

The argument var is a variable. condition-case does not bind this variable when executing the protected-form, only when it handles an error. At that time, var is bound locally to a list of the form (error-symbol . data), giving the particulars of the error. The handler can refer to this list to decide what to do. For example, if the error is for failure opening a file, the file name is the second element of data---the third element of var.

If var is nil, that means no variable is bound. Then the error symbol and associated data are not made available to the handler.

Here is an example of using condition-case to handle the error that results from dividing by zero. The handler prints out a warning message and returns a very large number.

(defun safe-divide (dividend divisor)
  (condition-case err                
      ;; Protected form.
      (/ dividend divisor)              
    ;; The handler.
    (arith-error                        ; Condition.
     (princ (format "Arithmetic error: %s" err))
     1000000)))
=> safe-divide

(safe-divide 5 0)
     -| Arithmetic error: (arith-error)
=> 1000000

The handler specifies condition name arith-error so that it will handle only division-by-zero errors. Other kinds of errors will not be handled, at least not by this condition-case. Thus,

(safe-divide nil 3)
     error--> Wrong type argument: integer-or-marker-p, nil

Here is a condition-case that catches all kinds of errors, including those signaled with error:

(setq baz 34)
     => 34

(condition-case err
    (if (eq baz 35)
        t
      ;; This is a call to the function error.
      (error "Rats!  The variable %s was %s, not 35." 'baz baz))
  ;; This is the handler; it is not a form.
  (error (princ (format "The error was: %s" err)) 
         2))
-| The error was: (error "Rats!  The variable baz was 34, not 35.")
=> 2

Error Symbols and Condition Names

When you signal an error, you specify an error symbol to specify the kind of error you have in mind. Each error has one and only one error symbol to categorize it. This is the finest classification of errors defined by the Lisp language.

These narrow classifications are grouped into a hierarchy of wider classes called error conditions, identified by condition names. The narrowest such classes belong to the error symbols themselves: each error symbol is also a condition name. There are also condition names for more extensive classes, up to the condition name error which takes in all kinds of errors. Thus, each error has one or more condition names: error, the error symbol if that is distinct from error, and perhaps some intermediate classifications.

In order for a symbol to be usable as an error symbol, it must have an error-conditions property which gives a list of condition names. This list defines the conditions which this kind of error belongs to. (The error symbol itself, and the symbol error, should always be members of this list.) Thus, the hierarchy of condition names is defined by the error-conditions properties of the error symbols.

In addition to the error-conditions list, the error symbol should have an error-message property whose value is a string to be printed when that error is signaled but not handled. If the error-message property exists, but is not a string, the error message `peculiar error' is used.

Here is how we define a new error symbol, new-error:

(put 'new-error
     'error-conditions
     '(error my-own-errors new-error))       
     => (error my-own-errors new-error)
(put 'new-error 'error-message "A new error")
     => "A new error"

This error has three condition names: new-error, the narrowest classification; my-own-errors, which we imagine is a wider classification; and error, which is the widest of all. Naturally, Emacs will never signal a new-error on its own; only an explicit call to signal (see section Errors) in your code can do this:

(signal 'new-error '(x y))
     error--> A new error: x, y

This error can be handled through any of the three condition names. This example handles new-error and any other errors in the class my-own-errors:

(condition-case foo
    (bar nil t)
  (my-own-errors nil))

The significant way that errors are classified is by their condition names--the names used to match errors with handlers. An error symbol serves only as a convenient way to specify the intended error message and list of condition names. If signal were given a list of condition names rather than one error symbol, that would be cumbersome.

By contrast, using only error symbols without condition names would seriously decrease the power of condition-case. Condition names make it possible to categorize errors at various levels of generality when you write an error handler. Using error symbols alone would eliminate all but the narrowest level of classification.

See section Standard Errors, for a list of all the standard error symbols and their conditions.

Cleaning Up from Nonlocal Exits

The unwind-protect construct is essential whenever you temporarily put a data structure in an inconsistent state; it permits you to ensure the data are consistent in the event of an error or throw.

Special Form: unwind-protect body cleanup-forms...

unwind-protect executes the body with a guarantee that the cleanup-forms will be evaluated if control leaves body, no matter how that happens. The body may complete normally, or execute a throw out of the unwind-protect, or cause an error; in all cases, the cleanup-forms will be evaluated.

Only the body is actually protected by the unwind-protect. If any of the cleanup-forms themselves exit nonlocally (e.g., via a throw or an error), it is not guaranteed that the rest of them will be executed. If the failure of one of the cleanup-forms has the potential to cause trouble, then it should be protected by another unwind-protect around that form.

The number of currently active unwind-protect forms counts, together with the number of local variable bindings, against the limit max-specpdl-size (see section Local Variables).

For example, here we make an invisible buffer for temporary use, and make sure to kill it before finishing:

(save-excursion
  (let ((buffer (get-buffer-create " *temp*")))
    (set-buffer buffer)
    (unwind-protect
        body
      (kill-buffer buffer))))

You might think that we could just as well write (kill-buffer (current-buffer)) and dispense with the variable buffer. However, the way shown above is safer, if body happens to get an error after switching to a different buffer! (Alternatively, you could write another save-excursion around the body, to ensure that the temporary buffer becomes current in time to kill it.)

Here is an actual example taken from the file `ftp.el'. It creates a process (see section Processes) to try to establish a connection to a remote machine. As the function ftp-login is highly susceptible to numerous problems which the writer of the function cannot anticipate, it is protected with a form that guarantees deletion of the process in the event of failure. Otherwise, Emacs might fill up with useless subprocesses.

(let ((win nil))
  (unwind-protect
      (progn
        (setq process (ftp-setup-buffer host file))
        (if (setq win (ftp-login process host user password))
            (message "Logged in")
          (error "Ftp login failed")))
    (or win (and process (delete-process process)))))

This example actually has a small bug: if the user types C-g to quit, and the quit happens immediately after the function ftp-setup-buffer returns but before the variable process is set, the process will not be killed. There is no easy way to fix this bug, but at least it is very unlikely.

Variables

A variable is a name used in a program to stand for a value. Nearly all programming languages have variables of some sort. In the text for a Lisp program, variables are written using the syntax for symbols.

In Lisp, unlike most programming languages, programs are represented primarily as Lisp objects and only secondarily as text. The Lisp objects used for variables are symbols: the symbol name is the variable name, and the variable's value is stored in the value cell of the symbol. The use of a symbol as a variable is independent of whether the same symbol has a function definition. See section Symbol Components.

The textual form of a program is determined by its Lisp object representation; it is the read syntax for the Lisp object which constitutes the program. This is why a variable in a textual Lisp program is written as the read syntax for the symbol that represents the variable.

Global Variables

The simplest way to use a variable is globally. This means that the variable has just one value at a time, and this value is in effect (at least for the moment) throughout the Lisp system. The value remains in effect until you specify a new one. When a new value replaces the old one, no trace of the old value remains in the variable.

You specify a value for a symbol with setq. For example,

(setq x '(a b))

gives the variable x the value (a b). Note that the first argument of setq, the name of the variable, is not evaluated, but the second argument, the desired value, is evaluated normally.

Once the variable has a value, you can refer to it by using the symbol by itself as an expression. Thus,

x
     => (a b)

assuming the setq form shown above has already been executed.

If you do another setq, the new value replaces the old one:

x
     => (a b)
(setq x 4)
     => 4
x
     => 4

Variables that Never Change

Emacs Lisp has two special symbols, nil and t, that always evaluate to themselves. These symbols cannot be rebound, nor can their value cells be changed. An attempt to change the value of nil or t signals a setting-constant error.

nil == 'nil
     => nil
(setq nil 500)
error--> Attempt to set constant symbol: nil

Local Variables

Global variables are given values that last until explicitly superseded with new values. Sometimes it is useful to create variable values that exist temporarily--only while within a certain part of the program. These values are called local, and the variables so used are called local variables.

For example, when a function is called, its argument variables receive new local values which last until the function exits. Similarly, the let special form explicitly establishes new local values for specified variables; these last until exit from the let form.

When a local value is established, the previous value (or lack of one) of the variable is saved away. When the life span of the local value is over, the previous value is restored. In the mean time, we say that the previous value is shadowed and not visible. Both global and local values may be shadowed (see section Scope).

If you set a variable (such as with setq) while it is local, this replaces the local value; it does not alter the global value, or previous local values that are shadowed. To model this behavior, we speak of a local binding of the variable as well as a local value.

The local binding is a conceptual place that holds a local value. Entry to a function, or a special form such as let, creates the local binding; exit from the function or from the let removes the local binding. As long as the local binding lasts, the variable's value is stored within it. Use of setq or set while there is a local binding stores a different value into the local binding; it does not create a new binding.

We also speak of the global binding, which is where (conceptually) the global value is kept.

A variable can have more than one local binding at a time (for example, if there are nested let forms that bind it). In such a case, the most recently created local binding that still exists is the current binding of the variable. (This is called dynamic scoping; see section Scoping Rules for Variable Bindings.) If there are no local bindings, the variable's global binding is its current binding. We also call the current binding the most-local existing binding, for emphasis. Ordinary evaluation of a symbol always returns the value of its current binding.

The special forms let and let* exist to create local bindings.

Special Form: let (bindings...) forms...

This function binds variables according to bindings and then evaluates all of the forms in textual order. The let-form returns the value of the last form in forms.

Each of the bindings is either (i) a symbol, in which case that symbol is bound to nil; or (ii) a list of the form (symbol value-form), in which case symbol is bound to the result of evaluating value-form. If value-form is omitted, nil is used.

All of the value-forms in bindings are evaluated in the order they appear and before any of the symbols are bound. Here is an example of this: Z is bound to the old value of Y, which is 2, not the new value, 1.

(setq Y 2)
     => 2
(let ((Y 1) 
      (Z Y))
  (list Y Z))
     => (1 2)

Special Form: let* (bindings...) forms...

This special form is like let, except that each symbol in bindings is bound as soon as its new value is computed, before the computation of the values of the following local bindings. Therefore, an expression in bindings may reasonably refer to the preceding symbols bound in this let* form. Compare the following example with the example above for let.

(setq Y 2)
     => 2
(let* ((Y 1)
       (Z Y))    ; Use the just-established value of Y.
  (list Y Z))
     => (1 1)

Here is a complete list of the other facilities which create local bindings:

Variable: max-specpdl-size

This variable defines the limit on the total number of local variable bindings and unwind-protect cleanups (see section Nonlocal Exits) that are allowed before signaling an error (with data "Variable binding depth exceeds max-specpdl-size").

This limit, with the associated error when it is exceeded, is one way that Lisp avoids infinite recursion on an ill-defined function.

The default value is 600.

max-lisp-eval-depth provides another limit on depth of nesting. See section Eval.

When a Variable is "Void"

If you have never given a symbol any value as a global variable, we say that that symbol's global value is void. In other words, the symbol's value cell does not have any Lisp object in it. If you try to evaluate the symbol, you get a void-variable error rather than a value.

Note that a value of nil is not the same as void. The symbol nil is a Lisp object and can be the value of a variable just as any other object can be; but it is a value. A void variable does not have any value.

After you have given a variable a value, you can make it void once more using makunbound.

Function: makunbound symbol

This function makes the current binding of symbol void. This causes any future attempt to use this symbol as a variable to signal the error void-variable, unless or until you set it again.

makunbound returns symbol.

(makunbound 'x)      ; Make the global value
                     ;   of x void.
     => x
x
error--> Symbol's value as variable is void: x

If symbol is locally bound, makunbound affects the most local existing binding. This is the only way a symbol can have a void local binding, since all the constructs that create local bindings create them with values. In this case, the voidness lasts at most as long as the binding does; when the binding is removed due to exit from the construct that made it, the previous or global binding is reexposed as usual, and the variable is no longer void unless the newly reexposed binding was void all along.

(setq x 1)               ; Put a value in the global binding.
     => 1
(let ((x 2))             ; Locally bind it.
  (makunbound 'x)        ; Void the local binding.
  x)
error--> Symbol's value as variable is void: x
x                        ; The global binding is unchanged.
     => 1

(let ((x 2))             ; Locally bind it.
  (let ((x 3))           ; And again.
    (makunbound 'x)      ; Void the innermost-local binding.
    x))                  ; And refer: it's void.
error--> Symbol's value as variable is void: x

(let ((x 2))
  (let ((x 3))
    (makunbound 'x))     ; Void inner binding, then remove it.
  x)                     ; Now outer let binding is visible.
     => 2

A variable that has been made void with makunbound is indistinguishable from one that has never received a value and has always been void.

You can use the function boundp to test whether a variable is currently void.

Function: boundp variable

boundp returns t if variable (a symbol) is not void; more precisely, if its current binding is not void. It returns nil otherwise.

(boundp 'abracadabra)          ; Starts out void.
     => nil
(let ((abracadabra 5))         ; Locally bind it.
  (boundp 'abracadabra))
     => t
(boundp 'abracadabra)          ; Still globally void.
     => nil
(setq abracadabra 5)           ; Make it globally nonvoid.
     => 5
(boundp 'abracadabra)
     => t

Defining Global Variables

You may announce your intention to use a symbol as a global variable with a definition, using defconst or defvar.

In Emacs Lisp, definitions serve three purposes. First, they inform the user who reads the code that certain symbols are intended to be used as variables. Second, they inform the Lisp system of these things, supplying a value and documentation. Third, they provide information to utilities such as etags and make-docfile, which create data bases of the functions and variables in a program.

The difference between defconst and defvar is primarily a matter of intent, serving to inform human readers of whether programs will change the variable. Emacs Lisp does not restrict the ways in which a variable can be used based on defconst or defvar declarations. However, it also makes a difference for initialization: defconst unconditionally initializes the variable, while defvar initializes it only if it is void.

One would expect user option variables to be defined with defconst, since programs do not change them. Unfortunately, this has bad results if the definition is in a library that is not preloaded: defconst would override any prior value when the library is loaded. Users would like to be able to set the option in their init files, and override the default value given in the definition. For this reason, user options must be defined with defvar.

Special Form: defvar symbol [value [doc-string]]

This special form informs a person reading your code that symbol will be used as a variable that the programs are likely to set or change. It is also used for all user option variables except in the preloaded parts of Emacs. Note that symbol is not evaluated; the symbol to be defined must appear explicitly in the defvar.

If symbol already has a value (i.e., it is not void), value is not even evaluated, and symbol's value remains unchanged. If symbol is void and value is specified, it is evaluated and symbol is set to the result. (If value is not specified, the value of symbol is not changed in any case.)

If symbol has a buffer-local binding in the current buffer, defvar sets the default value, not the local value.

If the doc-string argument appears, it specifies the documentation for the variable. (This opportunity to specify documentation is one of the main benefits of defining the variable.) The documentation is stored in the symbol's variable-documentation property. The Emacs help functions (see section Documentation) look for this property.

If the first character of doc-string is `*', it means that this variable is considered to be a user option. This affects commands such as set-variable and edit-options.

For example, this form defines foo but does not set its value:

(defvar foo)
     => foo

The following example sets the value of bar to 23, and gives it a documentation string:

(defvar bar 23
  "The normal weight of a bar.")
     => bar

The following form changes the documentation string for bar, making it a user option, but does not change the value, since bar already has a value. (The addition (1+ 23) is not even performed.)

(defvar bar (1+ 23)
  "*The normal weight of a bar.")
     => bar
bar
     => 23

Here is an equivalent expression for the defvar special form:

(defvar symbol value doc-string)
==
(progn
  (if (not (boundp 'symbol))
      (setq symbol value))
  (put 'symbol 'variable-documentation 'doc-string)
  'symbol)

The defvar form returns symbol, but it is normally used at top level in a file where its value does not matter.

Special Form: defconst symbol [value [doc-string]]

This special form informs a person reading your code that symbol has a global value, established here, that will not normally be changed or locally bound by the execution of the program. The user, however, may be welcome to change it. Note that symbol is not evaluated; the symbol to be defined must appear explicitly in the defconst.

defconst always evaluates value and sets the global value of symbol to the result, provided value is given. If symbol has a buffer-local binding in the current buffer, defconst sets the default value, not the local value.

Please note: don't use defconst for user option variables in libraries that are not normally loaded. The user should be able to specify a value for such a variable in the `.emacs' file, so that it will be in effect if and when the library is loaded later.

Here, pi is a constant that presumably ought not to be changed by anyone (attempts by the Indiana State Legislature notwithstanding). As the second form illustrates, however, this is only advisory.

(defconst pi 3 "Pi to one place.")
     => pi
(setq pi 4)
     => pi
pi
     => 4

Function: user-variable-p variable

This function returns t if variable is a user option, intended to be set by the user for customization, nil otherwise. (Variables other than user options exist for the internal purposes of Lisp programs, and users need not know about them.)

User option variables are distinguished from other variables by the first character of the variable-documentation property. If the property exists and is a string, and its first character is `*', then the variable is a user option.

Note that if the defconst and defvar special forms are used while the variable has a local binding, the local binding's value is set, and the global binding is not changed. This would be confusing. But the normal way to use these special forms is at top level in a file, where no local binding should be in effect.

Accessing Variable Values

The usual way to reference a variable is to write the symbol which names it (see section Symbol Forms). This requires you to specify the variable name when you write the program. Usually that is exactly what you want to do. Occasionally you need to choose at run time which variable to reference; then you can use symbol-value.

Function: symbol-value symbol

This function returns the value of symbol. This is the value in the innermost local binding of the symbol, or its global value if it has no local bindings.

(setq abracadabra 5)
     => 5
(setq foo 9)
     => 9

;; Here the symbol abracadabra
;;   is the symbol whose value is examined.
(let ((abracadabra 'foo))
  (symbol-value 'abracadabra))
     => foo

;; Here the value of abracadabra,
;;   which is foo,
;;   is the symbol whose value is examined.
(let ((abracadabra 'foo))
  (symbol-value abracadabra))
     => 9

(symbol-value 'abracadabra)
     => 5

A void-variable error is signaled if symbol has neither a local binding nor a global value.

How to Alter a Variable Value

The usual way to change the value of a variable is with the special form setq. When you need to compute the choice of variable at run time, use the function set.

Special Form: setq [symbol form]...

This special form is the most common method of changing a variable's value. Each symbol is given a new value, which is the result of evaluating the corresponding form. The most-local existing binding of the symbol is changed.

The value of the setq form is the value of the last form.

(setq x (1+ 2))
     => 3
x                   ; x now has a global value.
     => 3
(let ((x 5)) 
  (setq x 6)        ; The local binding of x is set.
  x)
     => 6
x                   ; The global value is unchanged.
     => 3

Note that the first form is evaluated, then the first symbol is set, then the second form is evaluated, then the second symbol is set, and so on:

(setq x 10          ; Notice that x is set before
      y (1+ x))     ;   the value of y is computed.
     => 11             

Function: set symbol value

This function sets symbol's value to value, then returns value. Since set is a function, the expression written for symbol is evaluated to obtain the symbol to be set.

The most-local existing binding of the variable is the binding that is set; shadowed bindings are not affected. If symbol is not actually a symbol, a wrong-type-argument error is signaled.

(set one 1)
error--> Symbol's value as variable is void: one
(set 'one 1)
     => 1
(set 'two 'one)
     => one
(set two 2)         ; two evaluates to symbol one.
     => 2
one                 ; So it is one that was set.
     => 2
(let ((one 1))      ; This binding of one is set,
  (set 'one 3)      ;   not the global value.
  one)
     => 3
one
     => 2

Logically speaking, set is a more fundamental primitive that setq. Any use of setq can be trivially rewritten to use set; setq could even be defined as a macro, given the availability of set. However, set itself is rarely used; beginners hardly need to know about it. It is needed only when the choice of variable to be set is made at run time. For example, the command set-variable, which reads a variable name from the user and then sets the variable, needs to use set.

Common Lisp note: in Common Lisp, set always changes the symbol's special value, ignoring any lexical bindings. In Emacs Lisp, all variables and all bindings are special, so set always affects the most local existing binding.

Scoping Rules for Variable Bindings

A given symbol foo may have several local variable bindings, established at different places in the Lisp program, as well as a global binding. The most recently established binding takes precedence over the others.

Local bindings in Emacs Lisp have indefinite scope and dynamic extent. Scope refers to where textually in the source code the binding can be accessed. Indefinite scope means that any part of the program can potentially access the variable binding. Extent refers to when, as the program is executing, the binding exists. Dynamic extent means that the binding lasts as long as the activation of the construct that established it.

The combination of dynamic extent and indefinite scope is called dynamic scoping. By contrast, most programming languages use lexical scoping, in which references to a local variable must be textually within the function or block that binds the variable.

Common Lisp note: variables declared "special" in Common Lisp are dynamically scoped like variables in Emacs Lisp.

Scope

Emacs Lisp uses indefinite scope for local variable bindings. This means that any function anywhere in the program text might access a given binding of a variable. Consider the following function definitions:

(defun binder (x)   ; x is bound in binder.
   (foo 5))         ; foo is some other function.

(defun user ()      ; x is used in user.
  (list x))

In a lexically scoped language, the binding of x from binder would never be accessible in user, because user is not textually contained within the function binder. However, in dynamically scoped Emacs Lisp, user may or may not refer to the binding of x established in binder, depending on circumstances:

Extent

Extent refers to the time during program execution that a variable name is valid. In Emacs Lisp, a variable is valid only while the form that bound it is executing. This is called dynamic extent. "Local" or "automatic" variables in most languages, including C and Pascal, have dynamic extent.

One alternative to dynamic extent is indefinite extent. This means that a variable binding can live on past the exit from the form that made the binding. Common Lisp and Scheme, for example, support this, but Emacs Lisp does not.

To illustrate this, the function below, make-add, returns a function that purports to add n to its own argument m. This would work in Common Lisp, but it does not work as intended in Emacs Lisp, because after the call to make-add exits, the variable n is no longer bound to the actual argument 2.

(defun make-add (n)
    (function (lambda (m) (+ n m))))  ; Return a function.
     => make-add
(fset 'add2 (make-add 2))  ; Define function add2
                           ;   with (make-add 2).
     => (lambda (m) (+ n m))
(add2 4)                   ; Try to add 2 to 4.
error--> Symbol's value as variable is void: n

Implementation of Dynamic Scoping

A simple sample implementation (which is not how Emacs Lisp actually works) may help you understand dynamic binding. This technique is called deep binding and was used in early Lisp systems.

Suppose there is a stack of bindings: variable-value pairs. At entry to a function or to a let form, we can push bindings on the stack for the arguments or local variables created there. We can pop those bindings from the stack at exit from the binding construct.

We can find the value of a variable by searching the stack from top to bottom for a binding for that variable; the value from that binding is the value of the variable. To set the variable, we search for the current binding, then store the new value into that binding.

As you can see, a function's bindings remain in effect as long as it continues execution, even during its calls to other functions. That is why we say the extent of the binding is dynamic. And any other function can refer to the bindings, if it uses the same variables while the bindings are in effect. That is why we say the scope is indefinite.

The actual implementation of variable scoping in GNU Emacs Lisp uses a technique called shallow binding. Each variable has a standard place in which its current value is always found--the value cell of the symbol.

In shallow binding, setting the variable works by storing a value in the value cell. When a new local binding is created, the local value is stored in the value cell, and the old value (belonging to a previous binding) is pushed on a stack. When a binding is eliminated, the old value is popped off the stack and stored in the value cell.

We use shallow binding because it has the same results as deep binding, but runs faster, since there is never a need to search for a binding.

Proper Use of Dynamic Scoping

Binding a variable in one function and using it in another is a powerful technique, but if used without restraint, it can make programs hard to understand. There are two clean ways to use this technique:

Buffer-Local Variables

Global and local variable bindings are found in most programming languages in one form or another. Emacs also supports another, unusual kind of variable binding: buffer-local bindings, which apply only to one buffer. Emacs Lisp is meant for programming editing commands, and having different values for a variable in different buffers is an important customization method.

Introduction to Buffer-Local Variables

A buffer-local variable has a buffer-local binding associated with a particular buffer. The binding is in effect when that buffer is current; otherwise, it is not in effect. If you set the variable while a buffer-local binding is in effect, the new value goes in that binding, so the global binding is unchanged; this means that the change is visible in that buffer alone.

A variable may have buffer-local bindings in some buffers but not in others. The global binding is shared by all the buffers that don't have their own bindings. Thus, if you set the variable in a buffer that does not have a buffer-local binding for it, the new value is visible in all buffers except those with buffer-local bindings. (Here we are assuming that there are no let-style local bindings to complicate the issue.)

The most common use of buffer-local bindings is for major modes to change variables that control the behavior of commands. For example, C mode and Lisp mode both set the variable paragraph-start to specify that only blank lines separate paragraphs. They do this by making the variable buffer-local in the buffer that is being put into C mode or Lisp mode, and then setting it to the new value for that mode.

The usual way to make a buffer-local binding is with make-local-variable, which is what major mode commands use. This affects just the current buffer; all other buffers (including those yet to be created) continue to share the global value.

A more powerful operation is to mark the variable as automatically buffer-local by calling make-variable-buffer-local. You can think of this as making the variable local in all buffers, even those yet to be created. More precisely, the effect is that setting the variable automatically makes the variable local to the current buffer if it is not already so. All buffers start out by sharing the global value of the variable as usual, but any setq creates a buffer-local binding for the current buffer. The new value is stored in the buffer-local binding, leaving the (default) global binding untouched. The global value can no longer be changed with setq; you need to use setq-default to do that.

Warning: when a variable has local values in one or more buffers, you can get Emacs very confused by binding the variable with let, changing to a different current buffer in which a different binding is in effect, and then exiting the let. To preserve your sanity, it is wise to avoid such situations. If you use save-excursion around each piece of code that changes to a different current buffer, you will not have this problem. Here is an example of incorrect code:

(setq foo 'b)
(set-buffer "a")
(make-local-variable 'foo)
(setq foo 'a)
(let ((foo 'temp))
  (set-buffer "b")
  ...)
foo => 'a      ; The old buffer-local value from buffer `a'
               ;   is now the default value.
(set-buffer "a")
foo => 'temp   ; The local value that should be gone
               ;   is now the buffer-local value in buffer `a'.

But save-excursion as shown here avoids the problem:

(let ((foo 'temp))
  (save-excursion
    (set-buffer "b")
    ...))

Local variables in a file you edit are also represented by buffer-local bindings for the buffer that holds the file within Emacs. See section How Emacs Chooses a Major Mode.

Creating and Destroying Buffer-local Bindings

Command: make-local-variable variable

This function creates a buffer-local binding in the current buffer for variable (a symbol). Other buffers are not affected. The value returned is variable.

The buffer-local value of variable starts out as the same value variable previously had. If variable was void, it remains void.

;; In buffer `b1':
(setq foo 5)                ; Affects all buffers.
     => 5
(make-local-variable 'foo)  ; Now it is local in `b1'.
     => foo
foo                         ; That did not change
     => 5                   ;   the value.
(setq foo 6)                ; Change the value
     => 6                   ;   in `b1'.
foo
     => 6

;; In buffer `b2', the value hasn't changed.
(save-excursion
  (set-buffer "b2")
  foo)
     => 5

Command: make-variable-buffer-local variable

This function marks variable (a symbol) automatically buffer-local, so that any attempt to set it will make it local to the current buffer at the time.

The value returned is variable.

Function: buffer-local-variables &optional buffer

This function tells you what the buffer-local variables are in buffer buffer. It returns an association list (see section Association Lists) in which each association contains one buffer-local variable and its value. When a buffer-local variable is void in buffer, then it appears directly in the resulting list. If buffer is omitted, the current buffer is used.

(make-local-variable 'foobar)
(makunbound 'foobar)
(make-local-variable 'bind-me)
(setq bind-me 69)
(setq lcl (buffer-local-variables))
    ;; First, built-in variables local in all buffers:
=> ((mark-active . nil)
    (buffer-undo-list nil)
    (mode-name . "Fundamental")
    ...
    ;; Next, non-built-in local variables. 
    ;; This one is local and void:
    foobar
    ;; This one is local and nonvoid:
    (bind-me . 69))

Note that storing new values into the CDRs of cons cells in this list does not change the local values of the variables.

Command: kill-local-variable variable

This function deletes the buffer-local binding (if any) for variable (a symbol) in the current buffer. As a result, the global (default) binding of variable becomes visible in this buffer. Usually this results in a change in the value of variable, since the global value is usually different from the buffer-local value just eliminated.

It is possible to kill the local binding of a variable that automatically becomes local when set. This causes the variable to show its global value in the current buffer. However, if you set the variable again, this will once again create a local value.

kill-local-variable returns variable.

Function: kill-all-local-variables

This function eliminates all the buffer-local variable bindings of the current buffer except for variables marker as "permanent". As a result, the buffer will see the default values of most variables.

This function also resets certain other information pertaining to the buffer: its local keymap is set to nil, its syntax table is set to the value of standard-syntax-table, and its abbrev table is set to the value of fundamental-mode-abbrev-table.

Every major mode command begins by calling this function, which has the effect of switching to Fundamental mode and erasing most of the effects of the previous major mode. To ensure that this does its job, the variables that major modes set should not be marked permanent.

kill-all-local-variables returns nil.

A local variable is permanent if the variable name (a symbol) has a permanent-local property that is non-nil. Permanent locals are appropriate for data pertaining to where the file came from or how to save it, rather than with how to edit the contents.

The Default Value of a Buffer-Local Variable

The global value of a variable with buffer-local bindings is also called the default value, because it is the value that is in effect except when specifically overridden.

The functions default-value and setq-default allow you to access and change the default value regardless of whether the current buffer has a buffer-local binding. For example, you could use setq-default to change the default setting of paragraph-start for most buffers; and this would work even when you are in a C or Lisp mode buffer which has a buffer-local value for this variable.

The special forms defvar and defconst also set the default value (if they set the variable at all), rather than any local value.

Function: default-value symbol

This function returns symbol's default value. This is the value that is seen in buffers that do not have their own values for this variable. If symbol is not buffer-local, this is equivalent to symbol-value (see section Accessing Variable Values).

Function: default-boundp variable

The function default-boundp tells you whether variable's default value is nonvoid. If (default-boundp 'foo) returns nil, then (default-value 'foo) would get an error.

default-boundp is to default-value as boundp is to symbol-value.

Special Form: setq-default symbol value

This sets the default value of symbol to value. symbol is not evaluated, but value is. The value of the setq-default form is value.

If a symbol is not buffer-local for the current buffer, and is not marked automatically buffer-local, this has the same effect as setq. If symbol is buffer-local for the current buffer, then this changes the value that other buffers will see (as long as they don't have a buffer-local value), but not the value that the current buffer sees.

;; In buffer `foo':
(make-local-variable 'local)
     => local
(setq local 'value-in-foo)
     => value-in-foo
(setq-default local 'new-default)
     => new-default
local
     => value-in-foo
(default-value 'local)
     => new-default

;; In (the new) buffer `bar':
local
     => new-default
(default-value 'local)
     => new-default
(setq local 'another-default)
     => another-default
(default-value 'local)
     => another-default

;; Back in buffer `foo':
local
     => value-in-foo
(default-value 'local)
     => another-default

Function: set-default symbol value

This function is like setq-default, except that symbol is evaluated.

(set-default (car '(a b c)) 23)
     => 23
(default-value 'a)
     => 23

Functions

A Lisp program is composed mainly of Lisp functions. This chapter explains what functions are, how they accept arguments, and how to define them.

What Is a Function?

In a general sense, a function is a rule for carrying on a computation given several values called arguments. The result of the computation is called the value of the function. The computation can also have side effects: lasting changes in the values of variables or the contents of data structures.

Here are important terms for functions in Emacs Lisp and for other function-like objects.

function
In Emacs Lisp, a function is anything that can be applied to arguments in a Lisp program. In some cases, we use it more specifically to mean a function written in Lisp. Special forms and macros are not functions.

primitive
A primitive is a function callable from Lisp that is written in C, such as car or append. These functions are also called built-in functions or subrs. (Special forms are also considered primitives.)

Usually the reason that a function is a primitives is because it is fundamental, or provides a low-level interface to operating system services, or because it needs to run fast. Primitives can be modified or added only by changing the C sources and recompiling the editor. See section Writing Emacs Primitives.

lambda expression
A lambda expression is a function written in Lisp. These are described in the following section.

special form
A special form is a primitive that is like a function but does not evaluate all of its arguments in the usual way. It may evaluate only some of the arguments, or may evaluate them in an unusual order, or several times. Many special forms are described in section Control Structures.

macro
A macro is a construct defined in Lisp by the programmer. It differs from a function in that it translates a Lisp expression that you write into an equivalent expression to be evaluated instead of the original expression. See section Macros, for how to define and use macros.

command
A command is an object that command-execute can invoke; it is a possible definition for a key sequence. Some functions are commands; a function written in Lisp is a command if it contains an interactive declaration (see section Defining Commands). Such a function can be called from Lisp expressions like other functions; in this case, the fact that the function is a command makes no difference.

Strings are commands also, even though they are not functions. A symbol is a command if its function definition is a command; such symbols can be invoked with M-x. The symbol is a function as well if the definition is a function. See section Command Loop Overview.

keystroke command
A keystroke command is a command that is bound to a key sequence (typically one to three keystrokes). The distinction is made here merely to avoid confusion with the meaning of "command" in non-Emacs editors; for programmers, the distinction is normally unimportant.

byte-code function
A byte-code function is a function that has been compiled by the byte compiler. See section Byte-Code Function Type.

Function: subrp object

This function returns t if object is a built-in function (i.e. a Lisp primitive).

(subrp 'message)            ; message is a symbol,
     => nil                 ;   not a subr object.
(subrp (symbol-function 'message))
     => t

Function: byte-code-function-p object

This function returns t if object is a byte-code function. For example:

(byte-code-function-p (symbol-function 'next-line))
     => t

Lambda Expressions

A function written in Lisp is a list that looks like this:

(lambda (arg-variables...)
  [documentation-string]
  [interactive-declaration]
  body-forms...)

(Such a list is called a lambda expression for historical reasons, even though it is not really an expression at all--it is not a form that can be evaluated meaningfully.)

Components of a Lambda Expression

The first element of a lambda expression is always the symbol lambda. This indicates that the list represents a function. The reason functions are defined to start with lambda is so that other lists, intended for other uses, will not accidentally be valid as functions.

The second element is a list of argument variable names (symbols). This is called the lambda list. When a Lisp function is called, the argument values are matched up against the variables in the lambda list, which are given local bindings with the values provided. See section Local Variables.

The documentation string is an actual string that serves to describe the function for the Emacs help facilities. See section Documentation Strings of Functions.

The interactive declaration is a list of the form (interactive code-string). This declares how to provide arguments if the function is used interactively. Functions with this declaration are called commands; they can be called using M-x or bound to a key. Functions not intended to be called in this way should not have interactive declarations. See section Defining Commands, for how to write an interactive declaration.

The rest of the elements are the body of the function: the Lisp code to do the work of the function (or, as a Lisp programmer would say, "a list of Lisp forms to evaluate"). The value returned by the function is the value returned by the last element of the body.

A Simple Lambda-Expression Example

Consider for example the following function:

(lambda (a b c) (+ a b c))

We can call this function by writing it as the CAR of an expression, like this:

((lambda (a b c) (+ a b c))
 1 2 3)

The body of this lambda expression is evaluated with the variable a bound to 1, b bound to 2, and c bound to 3. Evaluation of the body adds these three numbers, producing the result 6; therefore, this call to the function returns the value 6.

Note that the arguments can be the results of other function calls, as in this example:

((lambda (a b c) (+ a b c))
 1 (* 2 3) (- 5 4))

Here all the arguments 1, (* 2 3), and (- 5 4) are evaluated, left to right. Then the lambda expression is applied to the argument values 1, 6 and 1 to produce the value 8.

It is not often useful to write a lambda expression as the CAR of a form in this way. You can get the same result, of making local variables and giving them values, using the special form let (see section Local Variables). And let is clearer and easier to use. In practice, lambda expressions are either stored as the function definitions of symbols, to produce named functions, or passed as arguments to other functions (see section Anonymous Functions).

However, calls to explicit lambda expressions were very useful in the old days of Lisp, before the special form let was invented. At that time, they were the only way to bind and initialize local variables.

Advanced Features of Argument Lists

Our simple sample function, (lambda (a b c) (+ a b c)), specifies three argument variables, so it must be called with three arguments: if you try to call it with only two arguments or four arguments, you get a wrong-number-of-arguments error.

It is often convenient to write a function that allows certain arguments to be omitted. For example, the function substring accepts three arguments--a string, the start index and the end index--but the third argument defaults to the end of the string if you omit it. It is also convenient for certain functions to accept an indefinite number of arguments, as the functions and and + do.

To specify optional arguments that may be omitted when a function is called, simply include the keyword &optional before the optional arguments. To specify a list of zero or more extra arguments, include the keyword &rest before one final argument.

Thus, the complete syntax for an argument list is as follows:

(required-vars...
 [&optional optional-vars...]
 [&rest rest-var])

The square brackets indicate that the &optional and &rest clauses, and the variables that follow them, are optional.

A call to the function requires one actual argument for each of the required-vars. There may be actual arguments for zero or more of the optional-vars, and there cannot be any more actual arguments than these unless &rest exists. In that case, there may be any number of extra actual arguments.

If actual arguments for the optional and rest variables are omitted, then they always default to nil. However, the body of the function is free to consider nil an abbreviation for some other meaningful value. This is what substring does; nil as the third argument means to use the length of the string supplied. There is no way for the function to distinguish between an explicit argument of nil and an omitted argument.

Common Lisp note: Common Lisp allows the function to specify what default value to use when an optional argument is omitted; GNU Emacs Lisp always uses nil.

For example, an argument list that looks like this:

(a b &optional c d &rest e)

binds a and b to the first two actual arguments, which are required. If one or two more arguments are provided, c and d are bound to them respectively; any arguments after the first four are collected into a list and e is bound to that list. If there are only two arguments, c is nil; if two or three arguments, d is nil; if four arguments or fewer, e is nil.

There is no way to have required arguments following optional ones--it would not make sense. To see why this must be so, suppose that c in the example were optional and d were required. If three actual arguments are given; then which variable would the third argument be for? Similarly, it makes no sense to have any more arguments (either required or optional) after a &rest argument.

Here are some examples of argument lists and proper calls:

((lambda (n) (1+ n))                ; One required:
 1)                                 ; requires exactly one argument.
     => 2
((lambda (n &optional n1)           ; One required and one optional:
         (if n1 (+ n n1) (1+ n)))   ; 1 or 2 arguments.
 1 2)
     => 3
((lambda (n &rest ns)               ; One required and one rest:
         (+ n (apply '+ ns)))       ; 1 or more arguments.
 1 2 3 4 5)
     => 15

Documentation Strings of Functions

A lambda expression may optionally have a documentation string just after the lambda list. This string does not affect execution of the function; it is a kind of comment, but a systematized comment which actually appears inside the Lisp world and can be used by the Emacs help facilities. See section Documentation, for how the documentation-string is accessed.

It is a good idea to provide documentation strings for all commands, and for all other functions in your program that users of your program should know about; internal functions might as well have only comments, since comments don't take up any room when your program is loaded.

The first line of the documentation string should stand on its own, because apropos displays just this first line. It should consist of one or two complete sentences that summarize the function's purpose.

The start of the documentation string is usually indented, but since these spaces come before the starting double-quote, they are not part of the string. Some people make a practice of indenting any additional lines of the string so that the text lines up. This is a mistake. The indentation of the following lines is inside the string; what looks nice in the source code will look ugly when displayed by the help commands.

You may wonder how the documentation string could be optional, since there are required components of the function that follow it (the body). Since evaluation of a string returns that string, without any side effects, it has no effect if it is not the last form in the body. Thus, in practice, there is no confusion between the first form of the body and the documentation string; if the only body form is a string then it serves both as the return value and as the documentation.

Naming a Function

In most computer languages, every function has a name; the idea of a function without a name is nonsensical. In Lisp, a function in the strictest sense has no name. It is simply a list whose first element is lambda, or a primitive subr-object.

However, a symbol can serve as the name of a function. This happens when you put the function in the symbol's function cell (see section Symbol Components). Then the symbol itself becomes a valid, callable function, equivalent to the list or subr-object that its function cell refers to. The contents of the function cell are also called the symbol's function definition. When the evaluator finds the function definition to use in place of the symbol, we call that symbol function indirection; see section Symbol Function Indirection.

In practice, nearly all functions are given names in this way and referred to through their names. For example, the symbol car works as a function and does what it does because the primitive subr-object #<subr car> is stored in its function cell.

We give functions names because it is more convenient to refer to them by their names in other functions. For primitive subr-objects such as #<subr car>, names are the only way you can refer to them: there is no read syntax for such objects. For functions written in Lisp, the name is more convenient to use in a call than an explicit lambda expression. Also, a function with a name can refer to itself--it can be recursive. Writing the function's name in its own definition is much more convenient than making the function definition point to itself (something that is not impossible but that has various disadvantages in practice).

Functions are often identified with the symbols used to name them. For example, we often speak of "the function car", not distinguishing between the symbol car and the primitive subr-object that is its function definition. For most purposes, there is no need to distinguish.

Even so, keep in mind that a function need not have a unique name. While a given function object usually appears in the function cell of only one symbol, this is just a matter of convenience. It is easy to store it in several symbols using fset; then each of the symbols is equally well a name for the same function.

A symbol used as a function name may also be used as a variable; these two uses of a symbol are independent and do not conflict.

Defining Named Functions

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.

Special Form: defun name argument-list body-forms

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)

This lambda expression is stored in the function cell of name. The value returned by evaluating the defun form is 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 forms in body-forms may be a documentation string and an interactive declaration.

Note that the same symbol name may also be used as a global variable, since the value cell is independent of the function cell.

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.

Calling Functions

Defining functions is only half the battle. Functions don't do anything until you call them, i.e., tell them to run. This process is also known as invocation.

The most common way of invoking a function is by evaluating a list. For example, evaluating the list (concat "a" "b") calls the function concat. See section Evaluation, for a description of evaluation.

When you write a list as an expression in your program, the function name is part of the program. This means that the choice of which function to call is made when you write the program. Usually that's just what you want. Occasionally you need to decide at run time which function to call. Then you can use the functions funcall and apply.

Function: funcall function &rest arguments

funcall calls function with arguments, and returns whatever function returns.

Since funcall is a function, all of its arguments, including function, are evaluated before funcall is called. This means that you can use any expression to obtain the function to be called. It also means that funcall does not see the expressions you write for the arguments, only their values. These values are not evaluated a second time in the act of calling function; funcall enters the normal procedure for calling a function at the place where the arguments have already been evaluated.

The argument function must be either a Lisp function or a primitive function. Special forms and macros are not allowed, because they make sense only when given the "unevaluated" argument expressions. funcall cannot provide these because, as we saw above, it never knows them in the first place.

(setq f 'list)
     => list
(funcall f 'x 'y 'z)
     => (x y z)
(funcall f 'x 'y '(z))
     => (x y (z))
(funcall 'and t nil)
error--> Invalid function: #<subr and>

Compare this example with that of apply.

Function: apply function &rest arguments

apply calls function with arguments, just like funcall but with one difference: the last of arguments is a list of arguments to give to function, rather than a single argument. We also say that this list is appended to the other arguments.

apply returns the result of calling function. As with funcall, function must either be a Lisp function or a primitive function; special forms and macros do not make sense in apply.

(setq f 'list)
     => list
(apply f 'x 'y 'z)
error--> Wrong type argument: listp, z
(apply '+ 1 2 '(3 4))
     => 10
(apply '+ '(1 2 3 4))
     => 10

(apply 'append '((a b c) nil (x y z) nil))
     => (a b c x y z)

An interesting example of using apply is found in the description of mapcar; see the following section.

It is common for Lisp functions to accept functions as arguments or find them in data structures (especially in hook variables and property lists) and call them using funcall or apply. Functions that accept function arguments are often called functionals.

Sometimes, when you call such a function, it is useful to supply a no-op function as the argument. Here are two different kinds of no-op function:

Function: identity arg

This function returns arg and has no side effects.

Function: ignore &rest args

This function ignores any arguments and returns nil.

Mapping Functions

A mapping function applies a given function to each element of a list or other collection. Emacs Lisp has three such functions; mapcar and mapconcat, which scan a list, are described here. For the third mapping function, mapatoms, see section Creating and Interning Symbols.

Function: mapcar function sequence

mapcar applies function to each element of sequence in turn. The results are made into a nil-terminated list.

The argument sequence may be a list, a vector or a string. The result is always a list. The length of the result is the same as the length of sequence.

For example:

(mapcar 'car '((a b) (c d) (e f)))
     => (a c e)
(mapcar '1+ [1 2 3])
     => (2 3 4)
(mapcar 'char-to-string "abc")
     => ("a" "b" "c")

;; Call each function in my-hooks.
(mapcar 'funcall my-hooks)

(defun mapcar* (f &rest args)
  "Apply FUNCTION to successive cars of all ARGS, until one
ends.  Return the list of results."
  ;; If no list is exhausted,
  (if (not (memq 'nil args))              
      ;; Apply function to CARs.
      (cons (apply f (mapcar 'car args))  
            (apply 'mapcar* f             
                   ;; Recurse for rest of elements.
                   (mapcar 'cdr args)))))

(mapcar* 'cons '(a b c) '(1 2 3 4))
     => ((a . 1) (b . 2) (c . 3))

Function: mapconcat function sequence separator

mapconcat applies function to each element of sequence: the results, which must be strings, are concatenated. Between each pair of result strings, mapconcat inserts the string separator. Usually separator contains a space or comma or other suitable punctuation.

The argument function must be a function that can take one argument and returns a string.

(mapconcat 'symbol-name
           '(The cat in the hat)
           " ")
     => "The cat in the hat"

(mapconcat (function (lambda (x) (format "%c" (1+ x))))
           "HAL-8000"
           "")
     => "IBM.9111"

Anonymous Functions

In Lisp, a function is a list that starts with lambda (or alternatively a primitive subr-object); names are "extra". Although usually functions are defined with 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.

Any method of creating such a list makes a valid function. Even this:

(setq silly (append '(lambda (x)) (list (list '+ (* 3 4) 'x))))
     => (lambda (x) (+ 12 x))

This computes a list that looks like (lambda (x) (+ 12 x)) and makes it the value (not the function definition!) of silly.

Here is how we might call this function:

(funcall silly 1)
     => 13

(It does not work to write (silly 1), because this function is not the function definition of silly. We have not given silly any function definition, just a value as a variable.)

Most of the time, anonymous functions are constants that appear in your program. For example, you might want to pass one as an argument to the function mapcar, which applies any given function to each element of a list. Here we pass an anonymous function that multiplies a number by two:

(defun double-each (list)
  (mapcar '(lambda (x) (* 2 x)) list))
     => double-each
(double-each '(2 11))
     => (4 22)

In such cases, we usually use the special form function instead of simple quotation to quote the anonymous function.

Special Form: function function-object

This special form returns function-object without evaluating it. In this, it is equivalent to quote. However, it serves as a note to the Emacs Lisp compiler that function-object is intended to be used only as a function, and therefore can safely be compiled. See section Quoting, for comparison.

Using function instead of quote makes a difference inside a function or macro that you are going to compile. For example:

(defun double-each (list)
  (mapcar (function (lambda (x) (* 2 x))) list))
     => double-each
(double-each '(2 11))
     => (4 22)

If this definition of double-each is compiled, the anonymous function is compiled as well. By contrast, in the previous definition where ordinary quote is used, the argument passed to mapcar is the precise list shown:

(lambda (arg) (+ arg 5))

The Lisp compiler cannot assume this list is a function, even though it looks like one, since it does not know what mapcar does with the list. Perhaps mapcar will check that the CAR of the third element is the symbol +! The advantage of function is that it tells the compiler to go ahead and compile the constant function.

We sometimes write function instead of quote when quoting the name of a function, but this usage is just a sort of comment.

(function symbol) == (quote symbol) == 'symbol

See documentation in section Access to Documentation Strings, for a realistic example using function and an anonymous function.

Accessing Function Cell Contents

The function definition of a symbol is the object stored in the function cell of the symbol. The functions described here access, test, and set the function cell of symbols.

Function: symbol-function symbol

This returns the object in the function cell of symbol. If the symbol's function cell is void, a void-function error is signaled.

This function does not check that the returned object is a legitimate function.

(defun bar (n) (+ n 2))
     => bar
(symbol-function 'bar)
     => (lambda (n) (+ n 2))
(fset 'baz 'bar)
     => bar
(symbol-function 'baz)
     => bar

If you have never given a symbol any function definition, we say that that symbol's function cell is void. In other words, the function cell does not have any Lisp object in it. If you try to call such a symbol as a function, it signals a void-function error.

Note that void is not the same as nil or the symbol void. The symbols nil and void are Lisp objects, and can be stored into a function cell just as any other object can be (and they can be valid functions if you define them in turn with defun); but nil or void is an object. A void function cell contains no object whatsoever.

You can test the voidness of a symbol's function definition with fboundp. After you have given a symbol a function definition, you can make it void once more using fmakunbound.

Function: fboundp symbol

Returns t if the symbol has an object in its function cell, nil otherwise. It does not check that the object is a legitimate function.

Function: fmakunbound symbol

This function makes symbol's function cell void, so that a subsequent attempt to access this cell will cause a void-function error. (See also makunbound, in section Local Variables.)

(defun foo (x) x)
     => x
(fmakunbound 'foo)
     => x
(foo 1)
error--> Symbol's function definition is void: foo

Function: fset symbol object

This function stores object in the function cell of symbol. The result is object. Normally object should be a function or the name of a function, but this is not checked.

There are three normal uses of this function:

Here are examples of the first two uses:

;; Give first the same definition car has.
(fset 'first (symbol-function 'car))
     => #<subr car>
(first '(1 2 3))
     => 1

;; Make the symbol car the function definition of xfirst.
(fset 'xfirst 'car)
     => car
(xfirst '(1 2 3))
     => 1
(symbol-function 'xfirst)
     => car
(symbol-function (symbol-function 'xfirst))
     => #<subr car>

;; Define a named keyboard macro.
(fset 'kill-two-lines "\^u2\^k")
     => "\^u2\^k"

When writing a function that extends a previously defined function, the following idiom is often used:

(fset 'old-foo (symbol-function 'foo))

(defun foo ()
  "Just like old-foo, except more so."
  (old-foo)
  (more-so))

This does not work properly if foo has been defined to autoload. In such a case, when foo calls old-foo, Lisp attempts to define old-foo by loading a file. Since this presumably defines foo rather than old-foo, it does not produce the proper results. The only way to avoid this problem is to make sure the file is loaded before moving aside the old definition of foo.

See also the function indirect-function in section Symbol Function Indirection.

Inline Functions

You can define an inline function by using defsubst instead of defun. An inline function works just like an ordinary function except for one thing: when you compile a call to the function, the function's definition is open-coded into the caller.

Making a function inline makes explicit calls run faster. But it also has disadvantages. For one thing, it reduces flexibility; if you change the definition of the function, calls already inlined still use the old definition until you recompile them. Since the flexibility of redefining functions is an important features of Emacs, you should not make a function inline unless its speed is really crucial.

Another disadvantage is that making a large function inline can increase the size of compiled code both in files and in memory. Since the advantages of inline functions are greatest for small functions, you generally should not make large functions inline.

It's possible to define a macro to expand into the same code that an inline function would execute. But the macro would have a limitation: you can use it only explicitly--a macro cannot be called with apply, mapcar and so on. Also, it takes some work to convert an ordinary function into a macro. (See section Macros.) To convert it into an inline function is very easy; simply replace defun with defsubst.

Inline functions can be used and open coded later on in the same file, following the definition, just like macros.

Emacs versions prior to 19 did not have inline functions.

Other Topics Related to Functions

Here is a table of several functions that do things related to function calling and function definitions. They are documented elsewhere, but we provide cross references here.

apply
See section Calling Functions.

autoload
See section Autoload.

call-interactively
See section Interactive Call.

commandp
See section Interactive Call.

documentation
See section Access to Documentation Strings.

eval
See section Eval.

funcall
See section Calling Functions.

ignore
See section Calling Functions.

indirect-function
See section Symbol Function Indirection.

interactive
See section Using interactive.

interactive-p
See section Interactive Call.

mapatoms
See section Creating and Interning Symbols.

mapcar
See section Mapping Functions.

mapconcat
See section Mapping Functions.

undefined
See section Key Lookup.

Macros

Macros enable you to define new control constructs and other language features. A macro is defined much like a function, but instead of telling how to compute a value, it tells how to compute another Lisp expression which will in turn compute the value. We call this expression the expansion of the macro.

Macros can do this because they operate on the unevaluated expressions for the arguments, not on the argument values as functions do. They can therefore construct an expansion containing these argument expressions or parts of them.

If you are using a macro to do something an ordinary function could do, just for the sake of speed, consider using an inline function instead. See section Inline Functions.

A Simple Example of a Macro

Suppose we would like to define a Lisp construct to increment a variable value, much like the ++ operator in C. We would like to write (inc x) and have the effect of (setq x (1+ x)). Here's a macro definition that does the job:

(defmacro inc (var)
   (list 'setq var (list '1+ var)))

When this is called with (inc x), the argument var has the value x---not the value of x. The body of the macro uses this to construct the expansion, which is (setq x (1+ x)). Once the macro definition returns this expansion, Lisp proceeds to evaluate it, thus incrementing x.

Expansion of a Macro Call

A macro call looks just like a function call in that it is a list which starts with the name of the macro. The rest of the elements of the list are the arguments of the macro.

Evaluation of the macro call begins like evaluation of a function call except for one crucial difference: the macro arguments are the actual expressions appearing in the macro call. They are not evaluated before they are given to the macro definition. By contrast, the arguments of a function are results of evaluating the elements of the function call list.

Having obtained the arguments, Lisp invokes the macro definition just as a function is invoked. The argument variables of the macro are bound to the argument values from the macro call, or to a list of them in the case of a &rest argument. And the macro body executes and returns its value just as a function body does.

The second crucial difference between macros and functions is that the value returned by the macro body is not the value of the macro call. Instead, it is an alternate expression for computing that value, also known as the expansion of the macro. The Lisp interpreter proceeds to evaluate the expansion as soon as it comes back from the macro.

Since the expansion is evaluated in the normal manner, it may contain calls to other macros. It may even be a call to the same macro, though this is unusual.

You can see the expansion of a given macro call by calling macroexpand.

Function: macroexpand form &optional environment

This function expands form, if it is a macro call. If the result is another macro call, it is expanded in turn, until something which is not a macro call results. That is the value returned by macroexpand. If form is not a macro call to begin with, it is returned as given.

Note that macroexpand does not look at the subexpressions of form (although some macro definitions may do so). Even if they are macro calls themselves, macroexpand does not expand them.

The function macroexpand does not expand calls to inline functions. Normally there is no need for that, since a call to an inline function is no harder to understand than a call to an ordinary function.

If environment is provided, it specifies an alist of macro definitions that shadow the currently defined macros. This is used by byte compilation.

(defmacro inc (var)
    (list 'setq var (list '1+ var)))
     => inc

(macroexpand '(inc r))
     => (setq r (1+ r))

(defmacro inc2 (var1 var2)
    (list 'progn (list 'inc var1) (list 'inc var2)))
     => inc2

(macroexpand '(inc2 r s))
     => (progn (inc r) (inc s))  ; inc not expanded here.

Macros and Byte Compilation

You might ask why we take the trouble to compute an expansion for a macro and then evaluate the expansion. Why not have the macro body produce the desired results directly? The reason has to do with compilation.

When a macro call appears in a Lisp program being compiled, the Lisp compiler calls the macro definition just as the interpreter would, and receives an expansion. But instead of evaluating this expansion, it compiles the expansion as if it had appeared directly in the program. As a result, the compiled code produces the value and side effects intended for the macro, but executes at full compiled speed. This would not work if the macro body computed the value and side effects itself--they would be computed at compile time, which is not useful.

In order for compilation of macro calls to work, the macros must be defined in Lisp when the calls to them are compiled. The compiler has a special feature to help you do this: if a file being compiled contains a defmacro form, the macro is defined temporarily for the rest of the compilation of that file. To use this feature, you must define the macro in the same file where it is used and before its first use.

While byte-compiling a file, any require calls at top-level are executed. One way to ensure that necessary macro definitions are available during compilation is to require the file that defines them. See section Features.

Defining Macros

A Lisp macro is a list whose CAR is macro. Its CDR should be a function; expansion of the macro works by applying the function (with apply) to the list of unevaluated argument-expressions from the macro call.

It is possible to use an anonymous Lisp macro just like an anonymous function, but this is never done, because it does not make sense to pass an anonymous macro to mapping functions such as mapcar. In practice, all Lisp macros have names, and they are usually defined with the special form defmacro.

Special Form: defmacro name argument-list body-forms...

defmacro defines the symbol name as a macro that looks like this:

(macro lambda argument-list . body-forms)

This macro object is stored in the function cell of name. The value returned by evaluating the defmacro form is name, but usually we ignore this value.

The shape and meaning of argument-list is the same as in a function, and the keywords &rest and &optional may be used (see section Advanced Features of Argument Lists). Macros may have a documentation string, but any interactive declaration is ignored since macros cannot be called interactively.

Backquote

It could prove rather awkward to write macros of significant size, simply due to the number of times the function list needs to be called. To make writing these forms easier, a macro ``' (often called backquote) exists.

Backquote allows you to quote a list, but selectively evaluate elements of that list. In the simplest case, it is identical to the special form quote (see section Quoting). For example, these two forms yield identical results:

(` (a list of (+ 2 3) elements))
     => (a list of (+ 2 3) elements)
(quote (a list of (+ 2 3) elements))
     => (a list of (+ 2 3) elements)

By inserting a special marker, `,', inside of the argument to backquote, it is possible to evaluate desired portions of the argument:

(list 'a 'list 'of (+ 2 3) 'elements)
     => (a list of 5 elements)
(` (a list of (, (+ 2 3)) elements))
     => (a list of 5 elements)

It is also possible to have an evaluated list spliced into the resulting list by using the special marker `,@'. The elements of the spliced list become elements at the same level as the other elements of the resulting list. The equivalent code without using ` is often unreadable. Here are some examples:

(setq some-list '(2 3))
     => (2 3)
(cons 1 (append some-list '(4) some-list))
     => (1 2 3 4 2 3)
(` (1 (,@ some-list) 4 (,@ some-list)))
     => (1 2 3 4 2 3)

(setq list '(hack foo bar))
     => (hack foo bar)
(cons 'use
  (cons 'the
    (cons 'words (append (cdr list) '(as elements)))))
     => (use the words foo bar as elements)
(` (use the words (,@ (cdr list)) as elements (,@ nil)))
     => (use the words foo bar as elements)

The reason for (,@ nil) is to avoid a bug in Emacs version 18. The bug occurs when a call to ,@ is followed only by constant elements. Thus,

(` (use the words (,@ (cdr list)) as elements))

would not work, though it really ought to. (,@ nil) avoids the problem by being a nonconstant element that does not affect the result.

Macro: ` list

This macro returns list as quote would, except that the list is copied each time this expression is evaluated, and any sublist of the form (, subexp) is replaced by the value of subexp. Any sublist of the form (,@ listexp) is replaced by evaluating listexp and splicing its elements into the containing list in place of this sublist. (A single sublist can in this way be replaced by any number of new elements in the containing list.)

There are certain contexts in which `,' would not be recognized and should not be used:

;; Use of a `,' expression as the CDR of a list.
(` (a . (, 1)))                             ; Not (a . 1)
     => (a \, 1)                                

;; Use of `,' in a vector.
(` [a (, 1) c])                             ; Not [a 1 c]
     error--> Wrong type argument                      

;; Use of a `,' as the entire argument of ``'.
(` (, 2))                                   ; Not 2
     => (\, 2)                                  

Common Lisp note: in Common Lisp, `,' and `,@' are implemented as reader macros, so they do not require parentheses. Emacs Lisp implements them as functions because reader macros are not supported (to save space).

Common Problems Using Macros

The basic facts of macro expansion have all been described above, but there consequences are often counterintuitive. This section describes some important consequences that can lead to trouble, and rules to follow to avoid trouble.

Evaluating Macro Arguments Too Many Times

When defining a macro you must pay attention to the number of times the arguments will be evaluated when the expansion is executed. The following macro (used to facilitate iteration) illustrates the problem. This macro allows us to write a simple "for" loop such as one might find in Pascal.

(defmacro for (var from init to final do &rest body)
  "Execute a simple \"for\" loop, e.g.,
    (for i from 1 to 10 do (print i))."
  (list 'let (list (list var init))
        (cons 'while (cons (list '<= var final)
                           (append body (list (list 'inc var)))))))
=> for

(for i from 1 to 3 do
   (setq square (* i i))
   (princ (format "\n%d %d" i square)))
==>
(let ((i 1))
  (while (<= i 3)
    (setq square (* i i))
    (princ (format "%d      %d" i square))
    (inc i)))

     -|1       1
     -|2       4
     -|3       9
=> nil

(The arguments from, to, and do in this macro are "syntactic sugar"; they are entirely ignored. The idea is that you will write noise words (such as from, to, and do) in those positions in the macro call.)

This macro suffers from the defect that final is evaluated on every iteration. If final is a constant, this is not a problem. If it is a more complex form, say (long-complex-calculation x), this can slow down the execution significantly. If final has side effects, executing it more than once is probably incorrect.

A well-designed macro definition takes steps to avoid this problem by producing an expansion that evaluates the argument expressions exactly once unless repeated evaluation is part of the intended purpose of the macro. Here is a correct expansion for the for macro:

(let ((i 1)
      (max 3))
  (while (<= i max)
    (setq square (* i i))
    (princ (format "%d      %d" i square))
    (inc i)))

Here is a macro definition that creates this expansion:

(defmacro for (var from init to final do &rest body)
  "Execute a simple for loop: (for i from 1 to 10 do (print i))."
  (` (let (((, var) (, init))
           (max (, final)))
       (while (<= (, var) max)
         (,@ body)
         (inc (, var))))))

Unfortunately, this introduces another problem.

Local Variables in Macro Expansions

The new definition of for has a new problem: it introduces a local variable named max which the user does not expect. This causes trouble in examples such as the following:

(let ((max 0))
  (for x from 0 to 10 do
    (let ((this (frob x)))
      (if (< max this)
          (setq max this)))))

The references to max inside the body of the for, which are supposed to refer to the user's binding of max, really access the binding made by for.

The way to correct this is to use an uninterned symbol instead of max (see section Creating and Interning Symbols). The uninterned symbol can be bound and referred to just like any other symbol, but since it is created by for, we know that it cannot appear in the user's program. Since it is not interned, there is no way the user can put it into the program later. It will never appear anywhere except where put by for. Here is a definition of for which works this way:

(defmacro for (var from init to final do &rest body)
  "Execute a simple for loop: (for i from 1 to 10 do (print i))."
  (let ((tempvar (make-symbol "max")))
    (` (let (((, var) (, init))
             ((, tempvar) (, final)))
         (while (<= (, var) (, tempvar))
                (,@ body)
                (inc (, var)))))))

This creates an uninterned symbol named max and puts it in the expansion instead of the usual interned symbol max that appears in expressions ordinarily.

Evaluating Macro Arguments in Expansion

Another problem can happen if you evaluate any of the macro argument expressions during the computation of the expansion, such as by calling eval (see section Eval). If the argument is supposed to refer to the user's variables, you may have trouble if the user happens to use a variable with the same name as one of the macro arguments. Inside the macro body, the macro argument binding is the most local binding of this variable, so any references inside the form being evaluated do refer to it. Here is an example:

(defmacro foo (a)
  (list 'setq (eval a) t))
     => foo
(setq x 'b)
(foo x) ==> (setq b t)
     => t                  ; and b has been set.
;; but
(setq a 'b)
(foo a) ==> (setq 'b t)     ; invalid!
error--> Symbol's value is void: b

It makes a difference whether the user types a or x, because a conflicts with the macro argument variable a.

In general it is best to avoid calling eval in a macro definition at all.

How Many Times is the Macro Expanded?

Occasionally problems result from the fact that a macro call is expanded each time it is evaluated in an interpreted function, but is expanded only once (during compilation) for a compiled function. If the macro definition has side effects, they will work differently depending on how many times the macro is expanded.

In particular, constructing objects is a kind of side effect. If the macro is called once, then the objects are constructed only once. In other words, the same structure of objects is used each time the macro call is executed. In interpreted operation, the macro is reexpanded each time, producing a fresh collection of objects each time. Usually this does not matter--the objects have the same contents whether they are shared or not. But if the surrounding program does side effects on the objects, it makes a difference whether they are shared. Here is an example:

(defmacro new-object ()
  (list 'quote (cons nil nil)))

(defun initialize (condition)
  (let ((object (new-object)))
    (if condition
	(setcar object condition))
    object))

If initialize is interpreted, a new list (nil) is constructed each time initialize is called. Thus, no side effect survives between calls. If initialize is compiled, then the macro new-object is expanded during compilation, producing a single "constant" (nil) that is reused and altered each time initialize is called.

Loading

Loading a file of Lisp code means bringing its contents into the Lisp environment in the form of Lisp objects. Emacs finds and opens the file, reads the text, evaluates each form, and then closes the file.

The load functions evaluate all the expressions in a file just as the eval-current-buffer function evaluates all the expressions in a buffer. The difference is that the load functions read and evaluate the text in the file as found on disk, not the text in an Emacs buffer.

The loaded file must contain Lisp expressions, either as source code or, optionally, as byte-compiled code. Each form in the file is called a top-level form. There is no special format for the forms in a loadable file; any form in a file may equally well be typed directly into a buffer and evaluated there. (Indeed, most code is tested this way.) Most often, the forms are function definitions and variable definitions.

A file containing Lisp code is often called a library. Thus, the "Rmail library" is a file containing code for Rmail mode. Similarly, a "Lisp library directory" is a directory of files containing Lisp code.

How Programs Do Loading

There are several interface functions for loading. For example, the autoload function creates a Lisp object that loads a file when it is evaluated (see section Autoload). require also causes files to be loaded (see section Features). Ultimately, all these facilities call the load function to do the work.

Function: load filename &optional missing-ok nomessage nosuffix

This function finds and opens a file of Lisp code, evaluates all the forms in it, and closes the file.

To find the file, load first looks for a file named `filename.elc', that is, for a file whose name has `.elc' appended. If such a file exists, it is loaded. But if there is no file by that name, then load looks for a file whose name has `.el' appended. If that file exists, it is loaded. Finally, if there is no file by either name, load looks for a file named filename with nothing appended, and loads it if it exists. (The load function is not clever about looking at filename. In the perverse case of a file named `foo.el.el', evaluation of (load "foo.el") will indeed find it.)

If the optional argument nosuffix is non-nil, then the suffixes `.elc' and `.el' are not tried. In this case, you must specify the precise file name you want.

If filename is a relative file name, such as `foo' or `baz/foo.bar', load searches for the file using the variable load-path. It appends filename to each of the directories listed in load-path, and loads the first file it finds whose name matches. The current default directory is tried only if it is specified in load-path, where it is represented as nil. All three possible suffixes are tried in the first directory in load-path, then all three in the second directory in load-path, etc.

If you get a warning that `foo.elc' is older than `foo.el', it means you should consider recompiling `foo.el'. See section Byte Compilation.

Messages like `Loading foo...' and `Loading foo...done' appear in the echo area during loading unless nomessage is non-nil.

Any errors that are encountered while loading a file cause load to abort. If the load was done for the sake of autoload, certain kinds of top-level forms, those which define functions, are undone.

The error file-error is signaled (with `Cannot open load file filename') if no file is found. No error is signaled if missing-ok is non-nil---then load just returns nil.

load returns t if the file loads successfully.

User Option: load-path

The value of this variable is a list of directories to search when loading files with load. Each element is a string (which must be a directory name) or nil (which stands for the current working directory). The value of load-path is initialized from the environment variable EMACSLOADPATH, if it exists; otherwise it is set to the default specified in `emacs/src/paths.h' when Emacs is built.

The syntax of EMACSLOADPATH is the same as that of PATH; fields are separated by `:', and `.' is used for the current default directory. Here is an example of how to set your EMACSLOADPATH variable from a csh `.login' file:

setenv EMACSLOADPATH .:/user/bil/emacs:/usr/lib/emacs/lisp

Here is how to set it using sh:

export EMACSLOADPATH
EMACSLOADPATH=.:/user/bil/emacs:/usr/local/lib/emacs/lisp

Here is an example of code you can place in a `.emacs' file to add several directories to the front of your default load-path:

(setq load-path
      (append
       (list nil
             "/user/bil/emacs"
             "/usr/local/lisplib")
       load-path))

In this example, the path searches the current working directory first, followed then by the `/user/bil/emacs' directory and then by the `/usr/local/lisplib' directory, which are then followed by the standard directories for Lisp code.

When Emacs version 18 processes command options `-l' or `-load' which specify Lisp libraries to be loaded, it temporarily adds the current directory to the front of load-path so that files in the current directory can be specified easily. Newer Emacs versions also find such files in the current directory, but without altering load-path.

Variable: load-in-progress

This variable is non-nil if Emacs is in the process of loading a file, and it is nil otherwise. This is how defun and provide determine whether a load is in progress, so that their effect can be undone if the load fails.

To learn how load is used to build Emacs, see section Building Emacs.

Autoload

The autoload facility allows you to make a function or macro available but put off loading its actual definition. An attempt to call a symbol whose definition is an autoload object automatically reads the file to install the real definition and its other associated code, and then calls the real definition.

To prepare a function or macro for autoloading, you must call autoload, specifying the function name and the name of the file to be loaded. A file such as `emacs/lisp/loaddefs.el' usually does this when Emacs is first built.

The following example shows how doctor is prepared for autoloading in `loaddefs.el':

(autoload 'doctor "doctor"
  "\
Switch to *doctor* buffer and start giving psychotherapy."
  t)

The backslash and newline immediately following the double-quote are a convention used only in the preloaded Lisp files such as `loaddefs.el'; they cause the documentation string to be put in the `etc/DOC' file. (See section Building Emacs.) In any other source file, you would write just this:

(autoload 'doctor "doctor"
  "Switch to *doctor* buffer and start giving psychotherapy."
  t)

Calling autoload creates an autoload object containing the name of the file and some other information, and makes this the function definition of the specified symbol. When you later try to call that symbol as a function or macro, the file is loaded; the loading should redefine that symbol with its proper definition. After the file completes loading, the function or macro is called as if it had been there originally.

If, at the end of loading the file, the desired Lisp function or macro has not been defined, then the error error is signaled (with data "Autoloading failed to define function function-name").

The autoloaded file may, of course, contain other definitions and may require or provide one or more features. If the file is not completely loaded (due to an error in the evaluation of the contents) any function definitions or provide calls that occurred during the load are undone. This is to ensure that the next attempt to call any function autoloading from this file will try again to load the file. If not for this, then some of the functions in the file might appear defined, but they may fail to work properly for the lack of certain subroutines defined later in the file and not loaded successfully.

Emacs as distributed comes with many autoloaded functions. The calls to autoload are in the file `loaddefs.el'. There is a convenient way of updating them automatically.

Write `;;;###autoload' on a line by itself before the real definition of the function, in its autoloadable source file; then the command M-x update-file-autoloads automatically puts the autoload call into `loaddefs.el'. M-x update-directory-autoloads is more powerful; it updates autoloads for all files in the current directory.

You can also put other kinds of forms into `loaddefs.el', by writing `;;;###autoload' followed on the same line by the form. M-x update-file-autoloads copies the form from that line.

The commands for updating autoloads work by visiting and editing the file `loaddefs.el'. To make the result take effect, you must save that file's buffer.

Function: autoload symbol filename &optional docstring interactive type

This function defines the function (or macro) named symbol so as to load automatically from filename. The string filename is a file name which will be passed to load when the function is called.

The argument docstring is the documentation string for the function. Normally, this is the same string that is in the function definition itself. This makes it possible to look at the documentation without loading the real definition.

If interactive is non-nil, then the function can be called interactively. This lets completion in M-x work without loading the function's real definition. The complete interactive specification need not be given here. If type is macro, then the function is really a macro. If type is keymap, then the function is really a keymap.

If symbol already has a non-nil function definition that is not an autoload object, autoload does nothing and returns nil. If the function cell of symbol is void, or is already an autoload object, then it is set to an autoload object that looks like this:

(autoload filename docstring interactive type)

For example,

(symbol-function 'run-prolog)
     => (autoload "prolog" 169681 t nil)

In this case, "prolog" is the name of the file to load, 169681 refers to the documentation string in the `emacs/etc/DOC' file (see section Documentation Basics), t means the function is interactive, and nil that it is not a macro.

Repeated Loading

You may load a file more than once in an Emacs session. For example, after you have rewritten and reinstalled a function definition by editing it in a buffer, you may wish to return to the original version; you can do this by reloading the file in which it is located.

When you load or reload files, bear in mind that the load and load-library functions automatically load a byte-compiled file rather than a non-compiled file of similar name. If you rewrite a file that you intend to save and reinstall, remember to byte-compile it if necessary; otherwise you may find yourself inadvertently reloading the older, byte-compiled file instead of your newer, non-compiled file!

When writing the forms in a library, keep in mind that the library might be loaded more than once. For example, the choice of defvar vs. defconst for defining a variable depends on whether it is desirable to reinitialize the variable if the library is reloaded: defconst does so, and defvar does not. (See section Defining Global Variables.)

The simplest way to add an element to an alist is like this:

(setq minor-mode-alist
      (cons '(leif-mode " Leif") minor-mode-alist))

But this would add multiple elements if the library is reloaded. To avoid the problem, write this:

(or (assq 'leif-mode minor-mode-alist)
    (setq minor-mode-alist
          (cons '(leif-mode " Leif") minor-mode-alist)))

Occasionally you will want to test explicitly whether a library has already been loaded; you can do so as follows:

(if (not (boundp 'foo-was-loaded))
    execute-first-time-only)

(setq foo-was-loaded t)

Features

provide and require are an alternative to autoload for loading files automatically. They work in terms of named features. Autoloading is triggered by calling a specific function, but a feature is loaded the first time another program asks for it by name.

The use of named features simplifies the task of determining whether required definitions have been defined. A feature name is a symbol that stands for a collection of functions, variables, etc. A program that needs the collection may ensure that they are defined by requiring the feature. If the file that contains the feature has not yet been loaded, then it will be loaded (or an error will be signaled if it cannot be loaded). The file thus loaded must provide the required feature or an error will be signaled.

To require the presence of a feature, call require with the feature name as argument. require looks in the global variable features to see whether the desired feature has been provided already. If not, it loads the feature from the appropriate file. This file should call provide at the top-level to add the feature to features.

Features are normally named after the files they are provided in so that require need not be given the file name.

For example, in `emacs/lisp/prolog.el', the definition for run-prolog includes the following code:

(defun run-prolog ()
  "Run an inferior Prolog process,\
 input and output via buffer *prolog*."
  (interactive)
  (require 'comint)
  (switch-to-buffer (make-comint "prolog" prolog-program-name))
  (inferior-prolog-mode))

The expression (require 'shell) loads the file `shell.el' if it has not yet been loaded. This ensures that make-shell is defined.

The `shell.el' file contains the following top-level expression:

(provide 'shell)

This adds shell to the global features list when the `shell' file is loaded, so that (require 'shell) will henceforth know that nothing needs to be done.

When require is used at top-level in a file, it takes effect if you byte-compile that file (see section Byte Compilation). This is in case the required package contains macros that the byte compiler must know about.

Although top-level calls to require are evaluated during byte compilation, provide calls are not. Therefore, you can ensure that a file of definitions is loaded before it is byte-compiled by including a provide followed by a require for the same feature, as in the following example.

(provide 'my-feature)  ; Ignored by byte compiler,
                       ;   evaluated by load.
(require 'my-feature)  ; Evaluated by byte compiler.

Function: provide feature

This function announces that feature is now loaded, or being loaded, into the current Emacs session. This means that the facilities associated with feature are or will be available for other Lisp programs.

The direct effect of calling provide is to add feature to the front of the list features if it is not already in the list. The argument feature must be a symbol. provide returns feature.

features
     => (bar bish)

(provide 'foo)
     => foo
features
     => (foo bar bish)

During autoloading, if the file is not completely loaded (due to an error in the evaluation of the contents) any function definitions or provide calls that occurred during the load are undone. See section Autoload.

Function: require feature &optional filename

This function checks whether feature is present in the current Emacs session (using (featurep feature); see below). If it is not, then require loads filename with load. If filename is not supplied, then the name of the symbol feature is used as the file name to load.

If feature is not provided after the file has been loaded, Emacs will signal the error error (with data `Required feature feature was not provided').

Function: featurep feature

This function returns t if feature has been provided in the current Emacs session (i.e., feature is a member of features.)

Variable: features

The value of this variable is a list of symbols that are the features loaded in the current Emacs session. Each symbol was put in this list with a call to provide. The order of the elements in the features list is not significant.

Unloading

You can discard the functions and variables loaded by a library to reclaim memory for other Lisp objects. To do this, use the function unload-feature:

Command: unload-feature feature

This command unloads the library that provided feature feature. It undefines all functions and variables defined with defvar, defmacro, defconst, defsubst and defalias by the library which provided feature feature. It then restores any autoloads associated with those symbols.

The unload-feature function is written in Lisp; its actions are based on the variable load-history.

Variable: load-history feature association list

This variable's value is an alist connecting library names with the names of functions and variables they define, the features they provide, and the features they require.

Each element is a list and describes one library. The CAR of the list is the name of the library, as a string. The rest of the list is composed of these kinds of objects:

The value of load-history may have one element whose CAR is nil. This element describes definitions made with eval-buffer on a buffer that is not visiting a file.

The command eval-region updates load-history, but does so by adding the symbols defined to the element for the file being visited, rather than replacing that element.

Hooks for Loading

You can ask for code to be executed if and when a particular library is loaded, by calling eval-after-load.

Function: eval-after-load library form

This function arranges to evaluate form at the end of loading the library library, if and when library is loaded.

The library name library must exactly match the argument of load. To get the proper results when an installed library is found by searching load-path, you should not include any directory names in library.

An error in form does not undo the load, but does prevent execution of the rest of form.

Variable: after-load-alist

An alist of expressions to evaluate if and when particular libraries are loaded. Each element looks like this:

(filename forms...)

The function load checks after-load-alist in order to implement eval-after-load.

Byte Compilation

GNU Emacs Lisp has a compiler that translates functions written in Lisp into a special representation called byte-code that can be executed more efficiently. The compiler replaces Lisp function definitions with byte-code. When a byte-code function is called, its definition is evaluated by the byte-code interpreter.

Because the byte-compiled code is evaluated by the byte-code interpreter, instead of being executed directly by the machine's hardware (as true compiled code is), byte-code is completely transportable from machine to machine without recompilation. It is not, however, as fast as true compiled code.

In general, any version of Emacs can run byte-compiled code produced by recent earlier versions of Emacs, but the reverse is not true. In particular, if you compile a program with Emacs 18, you can run the compiled code in Emacs 19, but not vice versa.

See section Debugging Problems in Compilation, for how to investigate errors occurring in byte compilation.

The Compilation Functions

You can byte-compile an individual function or macro definition with the byte-compile function. You can compile a whole file with byte-compile-file, or several files with byte-recompile-directory or batch-byte-compile.

When you run the byte compiler, you may get warnings in a buffer called `*Compile-Log*'. These report usage in your program that suggest a problem, but are not necessarily erroneous.

Be careful when byte-compiling code that uses macros. Macro calls are expanded when they are compiled, so the macros must already be defined for proper compilation. For more details, see section Macros and Byte Compilation.

While byte-compiling a file, any require calls at top-level are executed. One way to ensure that necessary macro definitions are available during compilation is to require the file that defines them. See section Features.

A byte-compiled function is not as efficient as a primitive function written in C, but runs much faster than the version written in Lisp. For a rough comparison, consider the example below:

(defun silly-loop (n)
  "Return time before and after N iterations of a loop."
  (let ((t1 (current-time-string)))
    (while (> (setq n (1- n)) 
              0))
    (list t1 (current-time-string))))
=> silly-loop

(silly-loop 100000)
=> ("Thu Jan 12 20:18:38 1989" 
    "Thu Jan 12 20:19:29 1989")  ; 51 seconds

(byte-compile 'silly-loop)
=> [Compiled code not shown]

(silly-loop 100000)
=> ("Thu Jan 12 20:21:04 1989" 
    "Thu Jan 12 20:21:17 1989")  ; 13 seconds

In this example, the interpreted code required 51 seconds to run, whereas the byte-compiled code required 13 seconds. These results are representative, but actual results will vary greatly.

Function: byte-compile symbol

This function byte-compiles the function definition of symbol, replacing the previous definition with the compiled one. The function definition of symbol must be the actual code for the function; i.e., the compiler does not follow indirection to another symbol. byte-compile does not compile macros. byte-compile returns the new, compiled definition of symbol.

(defun factorial (integer)
  "Compute factorial of INTEGER."
  (if (= 1 integer) 1
    (* integer (factorial (1- integer)))))
     => factorial

(byte-compile 'factorial)
     =>
#[(integer)
  "^H\301U\203^H^@\301\207\302^H\303^HS!\"\207"
  [integer 1 * factorial]
  4 "Compute factorial of INTEGER."]

The result is a compiled function object. The string it contains is the actual byte-code; each character in it is an instruction. The vector contains all the constants, variable names and function names used by the function, except for certain primitives that are coded as special instructions.

Command: compile-defun

This command reads the defun containing point, compiles it, and evaluates the result. If you use this on a defun that is actually a function definition, the effect is to install a compiled version of that function.

Command: byte-compile-file filename

This function compiles a file of Lisp code named filename into a file of byte-code. The output file's name is made by appending `c' to the end of filename.

Compilation works by reading the input file one form at a time. If it is a definition of a function or macro, the compiled function or macro definition is written out. Other forms are batched together, then each batch is compiled, and written so that its compiled code will be executed when the file is read. All comments are discarded when the input file is read.

This command returns t. When called interactively, it prompts for the file name.

% ls -l push*
-rw-r--r--  1 lewis     791 Oct  5 20:31 push.el

(byte-compile-file "~/emacs/push.el")
     => t

% ls -l push*
-rw-r--r--  1 lewis     791 Oct  5 20:31 push.el
-rw-rw-rw-  1 lewis     638 Oct  8 20:25 push.elc

Command: byte-recompile-directory directory flag

This function recompiles every `.el' file in directory that needs recompilation. A file needs recompilation if a `.elc' file exists but is older than the `.el' file.

If a `.el' file exists, but there is no corresponding `.elc' file, then flag is examined. If it is nil, the file is ignored. If it is non-nil, the user is asked whether the file should be compiled.

The returned value of this command is unpredictable.

Function: batch-byte-compile

This function runs byte-compile-file on the files remaining on the command line. This function must be used only in a batch execution of Emacs, as it kills Emacs on completion. An error in one file does not prevent processing of subsequent files. (The file which gets the error will not, of course, produce any compiled code.)

% emacs -batch -f batch-byte-compile *.el

Function: byte-code code-string data-vector max-stack

This function actually interprets byte-code. A byte-compiled function is actually defined with a body that calls byte-code. Don't call this function yourself. Only the byte compiler knows how to generate valid calls to this function.

In newer Emacs versions (19 and up), byte-code is usually executed as part of a compiled function object, and only rarely as part of a call to byte-code.

Evaluation During Compilation

These features permit you to write code to be evaluated during compilation of a program.

Special Form: eval-and-compile body

This form marks body to be evaluated both when you compile the containing code and when you run it (whether compiled or not).

You can get a similar result by putting body in a separate file and referring to that file with require. Using require is preferable if there is a substantial amount of code to be executed in this way.

Special Form: eval-when-compile body

This form marks body to be evaluated at compile time only. The result of evaluation by the compiler becomes a constant which appears in the compiled program. When the program is interpreted, not compiled at all, body is evaluated normally.

At top-level, this is analogous to the Common Lisp idiom (eval-when (compile) ...). Elsewhere, the Common Lisp `#.' reader macro (but not when interpreting) is closer to what eval-when-compile does.

Byte-Code Objects

Byte-compiled functions have a special data type: they are byte-code function objects.

Internally, a byte-code function object is much like a vector; however, the evaluator handles this data type specially when it appears as a function to be called. The printed representation for a byte-code function object is like that for a vector, with an additional `#' before the opening `['.

In Emacs version 18, there was no byte-code function object data type; compiled functions used the function byte-code to run the byte code.

A byte-code function object must have at least four elements; there is no maximum number, but only the first six elements are actually used. They are:

arglist
The list of argument symbols.

byte-code
The string containing the byte-code instructions.

constants
The vector of constants referenced by the byte code.

stacksize
The maximum stack size this function needs.

docstring
The documentation string (if any); otherwise, nil. For functions preloaded before Emacs is dumped, this is usually an integer which is an index into the `DOC' file; use documentation to convert this into a string (see section Access to Documentation Strings).

interactive
The interactive spec (if any). This can be a string or a Lisp expression. It is nil for a function that isn't interactive.

Here's an example of a byte-code function object, in printed representation. It is the definition of the command backward-sexp.

#[(&optional arg)
  "^H\204^F^@\301^P\302^H[!\207"
  [arg 1 forward-sexp]
  2
  254435
  "p"]

The primitive way to create a byte-code object is with make-byte-code:

Function: make-byte-code &rest elements

This function constructs and returns a byte-code function object with elements as its elements.

You should not try to come up with the elements for a byte-code function yourself, because if they are inconsistent, Emacs may crash when you call the function. Always leave it to the byte-compiler to create these objects; it, we hope, always makes the elements consistent.

You can access the elements of a byte-code object using aref; you can also use vconcat to create a vector with the same elements.

Disassembled Byte-Code

People do not write byte-code; that job is left to the byte compiler. But we provide a disassembler to satisfy a cat-like curiosity. The disassembler converts the byte-compiled code into humanly readable form.

The byte-code interpreter is implemented as a simple stack machine. Values get stored by being pushed onto the stack, and are popped off and manipulated, the results being pushed back onto the stack. When a function returns, the top of the stack is popped and returned as the value of the function.

In addition to the stack, values used during byte-code execution can be stored in ordinary Lisp variables. Variable values can be pushed onto the stack, and variables can be set by popping the stack.

Command: disassemble object &optional stream

This function prints the disassembled code for object. If stream is supplied, then output goes there. Otherwise, the disassembled code is printed to the stream standard-output. The argument object can be a function name or a lambda expression.

As a special exception, if this function is used interactively, it outputs to a buffer named `*Disassemble*'.

Here are two examples of using the disassemble function. We have added explanatory comments to help you relate the byte-code to the Lisp source; these do not appear in the output of disassemble. These examples show unoptimized byte-code. Nowadays byte-code is usually optimized, but we did not want to rewrite these examples, since they still serve their purpose.

(defun factorial (integer)
  "Compute factorial of an integer."
  (if (= 1 integer) 1
    (* integer (factorial (1- integer)))))
     => factorial

(factorial 4)
     => 24

(disassemble 'factorial)
     -| byte-code for factorial:
 doc: Compute factorial of an integer.
 args: (integer)

0   constant 1              ; Push 1 onto stack.

1   varref   integer        ; Get value of integer 
                            ;   from the environment
                            ;   and push the value
                            ;   onto the stack.

2   eqlsign                 ; Pop top two values off stack,
                            ;   compare them,
                            ;   and push result onto stack.

3   goto-if-nil 10          ; Pop and test top of stack;
                            ;   if nil, go to 10,
                            ;   else continue.

6   constant 1              ; Push 1 onto top of stack.

7   goto     17             ; Go to 17 (in this case, 1 will be
                            ;   returned by the function).

10  constant *              ; Push symbol * onto stack.

11  varref   integer        ; Push value of integer onto stack.

12  constant factorial      ; Push factorial onto stack.

13  varref   integer        ; Push value of integer onto stack.

14  sub1                    ; Pop integer, decrement value,
                            ;   push new value onto stack.

                            ; Stack now contains:
                            ;   - decremented value of integer
                            ;   - factorial 
                            ;   - value of integer
                            ;   - *

15  call     1              ; Call function factorial using
                            ;   the first (i.e., the top) element
                            ;   of the stack as the argument;
                            ;   push returned value onto stack.

                            ; Stack now contains:
                            ;   - result of result of recursive
                            ;        call to factorial
                            ;   - value of integer
                            ;   - *

16  call     2              ; Using the first two
                            ;   (i.e., the top two)
                            ;   elements of the stack
                            ;   as arguments,
                            ;   call the function *,
                            ;   pushing the result onto the stack.

17  return                  ; Return the top element
                            ;   of the stack.
     => nil

The silly-loop function is somewhat more complex:

(defun silly-loop (n)
  "Return time before and after N iterations of a loop."
  (let ((t1 (current-time-string)))
    (while (> (setq n (1- n)) 
              0))
    (list t1 (current-time-string))))
     => silly-loop

(disassemble 'silly-loop)
     -| byte-code for silly-loop:
 doc: Return time before and after N iterations of a loop.
 args: (n)

0   constant current-time-string  ; Push
                                  ;   current-time-string
                                  ;   onto top of stack.

1   call     0              ; Call current-time-string
                            ;    with no argument,
                            ;    pushing result onto stack.

2   varbind  t1             ; Pop stack and bind t1
                            ;   to popped value.

3   varref   n              ; Get value of n from
                            ;   the environment and push
                            ;   the value onto the stack.

4   sub1                    ; Subtract 1 from top of stack.

5   dup                     ; Duplicate the top of the stack;
                            ;   i.e. copy the top of
                            ;   the stack and push the
                            ;   copy onto the stack.

6   varset   n              ; Pop the top of the stack,
                            ;   and bind n to the value.

                            ; In effect, the sequence dup varset
                            ;   copies the top of the stack
                            ;   into the value of n
                            ;   without popping it.

7   constant 0              ; Push 0 onto stack.

8   gtr                     ; Pop top two values off stack,
                            ;   test if n is greater than 0
                            ;   and push result onto stack.

9   goto-if-nil-else-pop 17 ; Goto 17 if n > 0
                            ;   else pop top of stack
                            ;   and continue
                            ;   (this exits the while loop).

12  constant nil            ; Push nil onto stack
                            ;   (this is the body of the loop).

13  discard                 ; Discard result of the body
                            ;   of the loop (a while loop
                            ;   is always evaluated for
                            ;   its side effects).

14  goto     3              ; Jump back to beginning
                            ;   of while loop.

17  discard                 ; Discard result of while loop
                            ;   by popping top of stack.

18  varref   t1             ; Push value of t1 onto stack.

19  constant current-time-string  ; Push 
                                  ;   current-time-string
                                  ;   onto top of stack.

20  call     0              ; Call current-time-string again.

21  list2                   ; Pop top two elements off stack,
                            ;   create a list of them,
                            ;   and push list onto stack.

22  unbind   1              ; Unbind t1 in local environment.

23  return                  ; Return value of the top of stack.

     => nil

Debugging Lisp Programs

There are three ways to investigate a problem in an Emacs Lisp program, depending on what you are doing with the program when the problem appears.

Another useful debugging tool is a dribble file. When a dribble file is open, Emacs copies all keyboard input characters to that file. Afterward, you can examine the file to find out what input was used. See section Terminal Input.

For debugging problems in terminal descriptions, the open-termscript function can be useful. See section Terminal Output.

The Lisp Debugger

The Lisp debugger provides you with the ability to suspend evaluation of a form. While evaluation is suspended (a state that is commonly known as a break), you may examine the run time stack, examine the values of local or global variables, or change those values. Since a break is a recursive edit, all the usual editing facilities of Emacs are available; you can even run programs that will enter the debugger recursively. See section Recursive Editing.

Entering the Debugger on an Error

The most important time to enter the debugger is when a Lisp error happens. This allows you to investigate the immediate causes of the error.

However, entry to the debugger is not a normal consequence of an error. Many commands frequently get Lisp errors when invoked in inappropriate contexts (such as C-f at the end of the buffer) and during ordinary editing it would be very unpleasant to enter the debugger each time this happens. If you want errors to enter the debugger, set the variable debug-on-error to non-nil.

User Option: debug-on-error

This variable determines whether the debugger is called when a error is signaled and not handled. If debug-on-error is t, all errors call the debugger. If it is nil, none call the debugger.

The value can also be a list of error conditions that should call the debugger. For example, if you set it to the list (void-variable), then only errors about a variable that has no value invoke the debugger.

To debug an error that happens during loading of the `.emacs' file, use the option `-debug-init', which binds debug-on-error to t while `.emacs' is loaded.

If your `.emacs' file sets debug-on-error, the effect lasts only until the end of loading `.emacs'. (This is an undesirable by-product of the `-debug-init' feature.) If you want `.emacs' to set debug-on-error permanently, use after-init-hook, like this:

(add-hook 'after-init-hook
          '(lambda () (setq debug-on-error t)))

Debugging Infinite Loops

When a program loops infinitely and fails to return, your first problem is to stop the loop. On most operating systems, you can do this with C-g, which causes quit.

Ordinary quitting gives no information about why the program was looping. To get more information, you can set the variable debug-on-quit to non-nil. Quitting with C-g is not considered an error, and debug-on-error has no effect on the handling of C-g. Contrariwise, debug-on-quit has no effect on errors.

Once you have the debugger running in the middle of the infinite loop, you can proceed from the debugger using the stepping commands. If you step through the entire loop, you will probably get enough information to solve the problem.

User Option: debug-on-quit

This variable determines whether the debugger is called when quit is signaled and not handled. If debug-on-quit is non-nil, then the debugger is called whenever you quit (that is, type C-g). If debug-on-quit is nil, then the debugger is not called when you quit. See section Quitting.

Entering the Debugger on a Function Call

To investigate a problem that happens in the middle of a program, one useful technique is to cause the debugger to be entered when a certain function is called. You can do this to the function in which the problem occurs, and then step through the function, or you can do this to a function called shortly before the problem, step quickly over the call to that function, and then step through its caller.

Command: debug-on-entry function-name

This function requests function-name to invoke the debugger each time it is called. It works by inserting the form (debug 'debug) into the function definition as the first form.

Any function defined as Lisp code may be set to break on entry, regardless of whether it is interpreted code or compiled code. Even functions that are commands may be debugged--they will enter the debugger when called inside a function, or when called interactively (after the reading of the arguments). Primitive functions (i.e., those written in C) may not be debugged.

When debug-on-entry is called interactively, it prompts for function-name in the minibuffer.

Caveat: if debug-on-entry is called more than once on the same function, the second call does nothing. If you redefine a function after using debug-on-entry on it, the code to enter the debugger is lost.

debug-on-entry returns function-name.

(defun fact (n)
  (if (zerop n) 1
      (* n (fact (1- n)))))
     => fact
(debug-on-entry 'fact)
     => fact
(fact 3)
     => 6

------ Buffer: *Backtrace* ------
Entering:
* fact(3)
  eval-region(4870 4878 t)
  byte-code("...")
  eval-last-sexp(nil)
  (let ...)
  eval-insert-last-sexp(nil)
* call-interactively(eval-insert-last-sexp)
------ Buffer: *Backtrace* ------

(symbol-function 'fact)
     => (lambda (n)
          (debug (quote debug))
          (if (zerop n) 1 (* n (fact (1- n)))))

Command: cancel-debug-on-entry function-name

This function undoes the effect of debug-on-entry on function-name. When called interactively, it prompts for function-name in the minibuffer.

If cancel-debug-on-entry is called more than once on the same function, the second call does nothing. cancel-debug-on-entry returns function-name.

Explicit Entry to the Debugger

You can cause the debugger to be called at a certain point in your program by writing the expression (debug) at that point. To do this, visit the source file, insert the text `(debug)' at the proper place, and type C-M-x. Be sure to undo this insertion before you save the file!

The place where you insert `(debug)' must be a place where an additional form can be evaluated and its value ignored. (If the value isn't ignored, it will alter the execution of the program!) Usually this means inside a progn or an implicit progn (see section Sequencing).

Using the Debugger

When the debugger is entered, it displays the previously selected buffer in one window and a buffer named `*Backtrace*' in another window. The backtrace buffer contains one line for each level of Lisp function execution currently going on. At the beginning of this buffer is a message describing the reason that the debugger was invoked (such as the error message and associated data, if it was invoked due to an error).

The backtrace buffer is read-only and uses a special major mode, Debugger mode, in which letters are defined as debugger commands. The usual Emacs editing commands are available; thus, you can switch windows to examine the buffer that was being edited at the time of the error, switch buffers, visit files, or do any other sort of editing. However, the debugger is a recursive editing level (see section Recursive Editing) and it is wise to go back to the backtrace buffer and exit the debugger (with the q command) when you are finished with it. Exiting the debugger gets out of the recursive edit and kills the backtrace buffer.

The contents of the backtrace buffer show you the functions that are executing and the arguments that were given to them. It also allows you to specify a stack frame by moving point to the line describing that frame. (A stack frame is the place where the Lisp interpreter records information about a particular invocation of a function. The frame whose line point is on is considered the current frame.) Some of the debugger commands operate on the current frame.

The debugger itself should always be run byte-compiled, since it makes assumptions about how many stack frames are used for the debugger itself. These assumptions are false if the debugger is running interpreted.

Debugger Commands

Inside the debugger (in Debugger mode), these special commands are available in addition to the usual cursor motion commands. (Keep in mind that all the usual facilities of Emacs, such as switching windows or buffers, are still available.)

The most important use of debugger commands is for stepping through code, so that you can see how control flows. The debugger can step through the control structures of an interpreted function, but cannot do so in a byte-compiled function. If you would like to step through a byte-compiled function, replace it with an interpreted definition of the same function. (To do this, visit the source file for the function and type C-M-x on its definition.)

c
Exit the debugger and continue execution. When continuing is possible, it resumes execution of the program as if the debugger had never been entered (aside from the effect of any variables or data structures you may have changed while inside the debugger).

Continuing is possible after entry to the debugger due to function entry or exit, explicit invocation, quitting or certain errors. Most errors cannot be continued; trying to continue an unsuitable error causes the same error to occur again.

d
Continue execution, but enter the debugger the next time any Lisp function is called. This allows you to step through the subexpressions of an expression, seeing what values the subexpressions compute, and what else they do.

The stack frame made for the function call which enters the debugger in this way will be flagged automatically so that the debugger will be called again when the frame is exited. You can use the u command to cancel this flag.

b
Flag the current frame so that the debugger will be entered when the frame is exited. Frames flagged in this way are marked with stars in the backtrace buffer.

u
Don't enter the debugger when the current frame is exited. This cancels a b command on that frame.

e
Read a Lisp expression in the minibuffer, evaluate it, and print the value in the echo area. This is the same as the command M-ESC, except that e is not normally disabled like M-ESC.

q
Terminate the program being debugged; return to top-level Emacs command execution.

If the debugger was entered due to a C-g but you really want to quit, and not debug, use the q command.

r
Return a value from the debugger. The value is computed by reading an expression with the minibuffer and evaluating it.

The r command makes a difference when the debugger was invoked due to exit from a Lisp call frame (as requested with b); then the value specified in the r command is used as the value of that frame.

You can't use r when the debugger was entered due to an error.

Invoking the Debugger

Here we describe fully the function used to invoke the debugger.

Function: debug &rest debugger-args

This function enters the debugger. It switches buffers to a buffer named `*Backtrace*' (or `*Backtrace*<2>' if it is the second recursive entry to the debugger, etc.), and fills it with information about the stack of Lisp function calls. It then enters a recursive edit, leaving that buffer in Debugger mode and displayed in the selected window.

Debugger mode provides a c command which operates by exiting the recursive edit, switching back to the previous buffer, and returning to whatever called debug. The r command also returns from debug. These are the only ways the function debug can return to its caller.

If the first of the debugger-args passed to debug is nil (or if it is not one of the following special values), then the rest of the arguments to debug are printed at the top of the `*Backtrace*' buffer. This mechanism is used to display a message to the user.

However, if the first argument passed to debug is one of the following special values, then it has special significance. Normally, these values are passed to debug only by the internals of Emacs and the debugger, and not by programmers calling debug.

The special values are:

lambda
When the first argument is lambda, the debugger displays `Entering:' as a line of text at the top of the buffer. This means that a function is being entered when debug-on-next-call is non-nil.

debug
When the first argument is debug, the debugger displays `Entering:' just as in the lambda case. However, debug as the argument indicates that the reason for entering the debugger is that a function set to debug on entry is being entered.

In addition, debug as the first argument directs the debugger to mark the function that called debug so that it will invoke the debugger when exited. (When lambda is the first argument, the debugger does not do this, because it has already been done by the interpreter.)

t
When the first argument is t, the debugger displays the following as the top line in the buffer:

Beginning evaluation of function call form:

This indicates that it was entered due to the evaluation of a list form at a time when debug-on-next-call is non-nil.

exit
When the first argument is exit, it indicates the exit of a stack frame previously marked to invoke the debugger on exit. The second argument given to debug in this case is the value being returned from the frame. The debugger displays `Return value:' on the top line of the buffer, followed by the value being returned.

error
When the first argument is error, the debugger indicates that it is being entered because an error or quit was signaled and not handled, by displaying `Signaling:' followed by the error signaled and any arguments to signal. For example,

(let ((debug-on-error t))
     (/ 1 0))

------ Buffer: *Backtrace* ------
Signaling: (arith-error)
  /(1 0)
...
------ Buffer: *Backtrace* ------

If an error was signaled, presumably the variable debug-on-error is non-nil. If quit was signaled, then presumably the variable debug-on-quit is non-nil.

nil
Use nil as the first of the debugger-args when you want to enter the debugger explicitly. The rest of the debugger-args are printed on the top line of the buffer. You can use this feature to display messages--for example, to remind yourself of the conditions under which debug is called.

Internals of the Debugger

This section describes functions and variables used internally by the debugger.

Variable: debugger

The value of this variable is the function to call to invoke the debugger. Its value must be a function of any number of arguments (or, more typically, the name of a function). Presumably this function will enter some kind of debugger. The default value of the variable is debug.

The first argument that Lisp hands to the function indicates why it was called. The convention for arguments is detailed in the description of debug.

Command: backtrace

This function prints a trace of Lisp function calls currently active. This is the function used by debug to fill up the `*Backtrace*' buffer. It is written in C, since it must have access to the stack to determine which function calls are active. The return value is always nil.

In the following example, backtrace is called explicitly in a Lisp expression. When the expression is evaluated, the backtrace is printed to the stream standard-output: in this case, to the buffer `backtrace-output'. Each line of the backtrace represents one function call. If the arguments of the function call are all known, they are displayed; if they are being computed, that fact is stated. The arguments of special forms are elided.

(with-output-to-temp-buffer "backtrace-output"
  (let ((var 1))
    (save-excursion
      (setq var (eval '(progn
                         (1+ var)
                         (list 'testing (backtrace))))))))

     => nil

----------- Buffer: backtrace-output ------------
  backtrace()
  (list ...computing arguments...)
  (progn ...)
  eval((progn (1+ var) (list (quote testing) (backtrace))))
  (setq ...)
  (save-excursion ...)
  (let ...)
  (with-output-to-temp-buffer ...)
  eval-region(1973 2142 #<buffer *scratch*>)
  byte-code("...  for eval-print-last-sexp ...")
  eval-print-last-sexp(nil)
* call-interactively(eval-print-last-sexp)
----------- Buffer: backtrace-output ------------

The character `*' indicates a frame whose debug-on-exit flag is set.

Variable: debug-on-next-call

This variable determines whether the debugger is called before the next eval, apply or funcall. It is automatically reset to nil when the debugger is entered.

The d command in the debugger works by setting this variable.

Function: backtrace-debug level flag

This function sets the debug-on-exit flag of the eval frame level levels down to flag. If flag is non-nil, this will cause the debugger to be entered when that frame exits. Even a nonlocal exit through that frame will enter the debugger.

The debug-on-exit flag is an entry in the stack frame of a function call. This flag is examined on every exit from a function.

Normally, this function is only called by the debugger.

Variable: command-debug-status

This variable records the debugging status of current interactive command. Each time a command is called interactively, this variable is bound to nil. The debugger can set this variable to leave information for future debugger invocations during the same command.

The advantage of using this variable rather that defining another global variable is that the data will never carry over to a later other command invocation.

Function: backtrace-frame frame-number

The function backtrace-frame is intended for use in Lisp debuggers. It returns information about what computation is happening in the eval frame level levels down.

If that frame has not evaluated the arguments yet (or is a special form), the value is (nil function arg-forms...).

If that frame has evaluated its arguments and called its function already, the value is (t function arg-values...).

In the return value, function is whatever was supplied as CAR of evaluated list, or a lambda expression in the case of a macro call. If the function has a &rest argument, that is represented as the tail of the list arg-values.

If the argument is out of range, backtrace-frame returns nil.

Debugging Invalid Lisp Syntax

The Lisp reader reports invalid syntax, but cannot say where the real problem is. For example, the error "End of file during parsing" in evaluating an expression indicates an excess of open parentheses (or square brackets). The reader detects this imbalance at the end of the file, but it cannot figure out where the close parenthesis should have been. Likewise, "Invalid read syntax: ")"" indicates an excess close parenthesis or missing open parenthesis, but not where the missing parenthesis belongs. How, then, to find what to change?

If the problem is not simply an imbalance of parentheses, a useful technique is to try C-M-e at the beginning of each defun, and see if it goes to the place where that defun appears to end. If it does not, there is a problem in that defun.

However, unmatched parentheses are the most common syntax errors in Lisp, and we can give further advice for those cases.

Excess Open Parentheses

The first step is to find the defun that is unbalanced. If there is an excess open parenthesis, the way to do this is to insert a close parenthesis at the end of the file and type C-M-b (backward-sexp). This will move you to the beginning of the defun that is unbalanced. (Then type C-SPC C-_ C-u C-SPC to set the mark there, undo the insertion of the close parenthesis, and finally return to the mark.)

The next step is to determine precisely what is wrong. There is no way to be sure of this except to study the program, but often the existing indentation is a clue to where the parentheses should have been. The easiest way to use this clue is to reindent with C-M-q and see what moves.

Before you do this, make sure the defun has enough close parentheses. Otherwise, C-M-q will get an error, or will reindent all the rest of the file until the end. So move to the end of the defun and insert a close parenthesis there. Don't use C-M-e to move there, since that too will fail to work until the defun is balanced.

Then go to the beginning of the defun and type C-M-q. Usually all the lines from a certain point to the end of the function will shift to the right. There is probably a missing close parenthesis, or a superfluous open parenthesis, near that point. (However, don't assume this is true; study the code to make sure.) Once you have found the discrepancy, undo the C-M-q, since the old indentation is probably appropriate to the intended parentheses.

After you think you have fixed the problem, use C-M-q again. It should not change anything, if the problem is really fixed.

Excess Close Parentheses

To deal with an excess close parenthesis, first insert an open parenthesis at the beginning of the file and type C-M-f to find the end of the unbalanced defun. (Then type C-SPC C-_ C-u C-SPC to set the mark there, undo the insertion of the open parenthesis, and finally return to the mark.)

Then find the actual matching close parenthesis by typing C-M-f at the beginning of the defun. This will leave you somewhere short of the place where the defun ought to end. It is possible that you will find a spurious close parenthesis in that vicinity.

If you don't see a problem at that point, the next thing to do is to type C-M-q at the beginning of the defun. A range of lines will probably shift left; if so, the missing open parenthesis or spurious close parenthesis is probably near the first of those lines. (However, don't assume this is true; study the code to make sure.) Once you have found the discrepancy, undo the C-M-q, since the old indentation is probably appropriate to the intended parentheses.

Debugging Problems in Compilation

When an error happens during byte compilation, it is normally due to invalid syntax in the program you are compiling. The compiler prints a suitable error message in the `*Compile-Log*' buffer, and then stops. The message may state a function name in which the error was found, or it may not. Regardless, here is how to find out where in the file the error occurred.

What you should do is switch to the buffer ` *Compiler Input*'. (Note that the buffer name starts with a space, so it does not show up in M-x list-buffers.) This buffer contains the program being compiled, and point shows how far the byte compiler was able to read.

If the error was due to invalid Lisp syntax, point shows exactly where the invalid syntax was detected. The cause of the error is not necessarily near by! Use the techniques in the previous section to find the error.

If the error was detected while compiling a form that had been read successfully, then point is located at the end of the form. In this case, it can't localize the error precisely, but can still show you which function to check.

Edebug

Edebug is a source-level debugger for Emacs Lisp programs that provides the following features:

The first three sections of this chapter should tell you enough about Edebug to enable you to use it.

Using Edebug

To debug a Lisp program with Edebug, you must first prepare the Lisp functions that you want to debug. See section Preparing Functions for Edebug.

Once a function is prepared, any call to the function activates Edebug. This involves entering a recursive edit which is a level of Edebug activation.

Activating Edebug may stop execution and let you step through the function, or it may continue execution while checking for debugging commands, depending on the selected Edebug execution mode. See section Edebug Modes.

Within Edebug, you normally view an Emacs buffer showing the source of the Lisp function you are debugging. We call this the Edebug buffer---but note that it is not always the same buffer, and it is not reserved for Edebug use.

An arrow at the left margin indicates the line where the function is executing. Point initially shows where within the line the function is executing, but this ceases to be true if you move point yourself.

If you prepare the definition of fac (shown below) for Edebug and then execute (fac 3), here is what you normally see. Point is at the open-parenthesis before if.

(defun fac (n)
=>-!-(if (< 0 n)
      (* n (fac (1- n)))
    1))

The places within a function where Edebug can stop execution are called stop points. These occur both before and after each subexpression that is a list, and also after each variable reference. Stop points before variables are optional, under the control of the value of edebug-stop-before-symbols. Here we show with periods the stop points normally found in the function fac:

(defun fac (n)
  .(if .(< 0 n.).
      .(* n. .(fac (1- n.).).).
    1).)

While a buffer is the Edebug buffer, the special commands of Edebug are available in it, instead of many usual editing commands. Type ? to display a list of Edebug commands. In particular, you can exit the innermost Edebug activation level with C-], and you can return all the way to top level with q.

For example, you can type the Edebug command SPC to execute until the next stop point. If you type SPC once after entry to fac, here is the state that you get:

(defun fac (n)
=>(if -!-(< 0 n)
      (* n (fac (1- n)))
    1))

When Edebug stops execution after an expression, it displays the expression's value in the echo area. Use the r command to display the value again later.

While Edebug is active, it catches all errors (if debug-on-error is non-nil) and quits (if debug-on-quit is non-nil) instead of the standard debugger. When this happens, Edebug displays the last stop point that it knows about. This may be the location of a call to a function which was not prepared for Edebug debugging, within which the error actually occurred.

Preparing Functions for Edebug

In order to use Edebug to debug a function, you must first prepare the function. Preparing a function inserts additional code into it which invokes Edebug at the proper places.

Any call to an Edebug-prepared function activates Edebug. This may or may not stop execution, depending on the Edebug execution mode in use. Some Edebug modes only update the display to indicate the progress of the evaluation without stopping execution. The default initial Edebug mode is step which does stop execution. See section Edebug Modes.

Once you have loaded Edebug, the command C-M-x is redefined so that when used on a function or macro definition, it prepares the function or macro if given a prefix argument. If the variable edebug-all-defuns is non-nil, that inverts the meaning of the prefix argument: then C-M-x prepares the function or macro unless it has a prefix argument. The default value of edebug-all-defuns is nil. The command M-x edebug-all-defuns toggles the value of the variable edebug-all-defuns.

If edebug-all-defuns is non-nil, then the commands eval-region and eval-current-buffer also prepare any functions and macros whose definitions they evaluate.

Loading a file does not prepare functions and macros for Edebug.

See section Evaluation for discussion of other evaluation functions available inside of Edebug.

Edebug Modes

Edebug supports several execution modes for running the program you are debugging. We call these alternatives Edebug modes; do not confuse them with major modes or minor modes. The current Edebug mode determines how Edebug displays the progress of the evaluation, whether it stops at each stop point, or continues to the next breakpoint, for example.

Normally, you specify the Edebug mode for execution by typing a command to continue the program in a certain mode. Here is a table of these commands. All except for S resume execution of the program, at least for a certain distance.

S
Stop: don't execute any more of the program for now, just wait for more Edebug commands.

SPC
Step: stop at the next stop point encountered.

t
Trace: pause one second at each Edebug stop point.

T
Rapid trace: mention each stop point, but don't actually pause.

g
Go: run until the next breakpoint. See section Breakpoints.

c
Continue: pause for one second at each breakpoint, but don't stop.

C
Continue: mention each breakpoint, but don't actually pause.

G
Non-stop: ignore breakpoints. You can still stop the program by typing S.

In general, the execution modes earlier in the above list run the program more slowly or stop sooner.

When you enter a new Edebug level, the mode comes from the value of the variable edebug-initial-mode. By default, this specifies step mode. If the mode thus specified is not stop mode, then the Edebug level executes the program (or part of it).

While executing or tracing, you can interrupt the execution by typing any Edebug command. Edebug stops the program at the next stop point and then executes the command that you typed. For example, typing t during execution switches to trace mode at the next stop point.

You can use the S command to stop execution without doing anything else.

If your function happens to read input, a character you hit intending to interrupt execution may be read by the function instead. You can avoid such unintended results by paying attention to when your program wants input.

Keyboard macros containing the commands in this section do not completely work: exiting from Edebug, to resume the program, loses track of the keyboard macro. This is not easy to fix.

Stepping

f
Run the program forward over one expression. More precisely, set a temporary breakpoint at the position that C-M-f would reach, then execute in go mode so that the program will stop at breakpoints. See section Breakpoints for the details on breakpoints.

With a prefix argument n, the temporary breakpoint is placed n sexps beyond point. If the containing list ends before n more elements, then the place to stop is after the containing expression.

Be careful that the position C-M-f finds is a place that the program will really get to; this may not be true in a condition-case, for example.

This command does forward-sexp starting at point rather than the stop point, thus providing more flexibility. If you want to execute one expression from the current stop point, type w first, to move point there.

o
Run the program until the end of the containing sexp. If the containing sexp is the top level defun, run until just before the function returns. If that is where you are now, return from the function and then stop.

This command does not exit the currently executing function unless you are positioned after the last sexp of the function.

If the program does a non-local exit, it may fail to reach the temporary breakpoint that this command sets.

i
Step into the function about to be called. Use this command before any of the arguments of the function call are evaluated, since otherwise it is too late.

One undesirable side effect of using edebug-step-in is that the next time the stepped-into function is called, Edebug will be called there as well.

h
Proceed to the stop point near where point is. This uses a temporary breakpoint.

The f command runs the program forward over one expression. More precisely, set a temporary breakpoint at the position that C-M-f would reach, then execute in go mode so that the program will stop at breakpoints. See section Breakpoints for the details on breakpoints.

With a prefix argument n, the temporary breakpoint is placed n sexps beyond point. If the containing list ends before n more elements, then the place to stop is after the containing expression.

Be careful that the position C-M-f finds is a place that the program will really get to; this may not be true in a condition-case, for example.

The f command uses the existing value of point as the basis for setting the breakpoint, because that is more flexible. To execute one expression from the current stop point, type w and then f.

The o command continues "out of" an expression. It places a temporary breakpoints at the end of the containing sexp. If the containing sexp is the top level defun, it continues until just before the function returns. If that is where you are now, it returns from the function and then stops.

This command does not exit the currently executing function unless you are positioned after the last sexp of the function.

The i command steps into the function about to be called. Use this command before any of the arguments of the function call are evaluated, since otherwise it is too late.

One undesirable side effect of using i is that the next time the stepped-into function is called, Edebug will be called there as well.

The h command proceeds to the stop point near where point is, using a temporary breakpoint.

All the commands in this section may fail to work as expected in case of nonlocal exit, because a nonlocal exit can bypass the temporary breakpoint where you expected the program to stop.

Miscellaneous

Some miscellaneous commands are described here.

C-]
Abort one level of Edebug activity.

q
Return to the top level editor command loop. This exits all recursive editing levels, including all levels of Edebug activity.

r
Redisplay the result of the previous expression in the echo area.

d
Display a backtrace, excluding Edebug's own functions for clarity.

You cannot use debugger commands in the backtrace buffer in Edebug as you would in the standard debugger.

The backtrace buffer is killed automatically when you continue execution.

Breakpoints

While using Edebug, you can specify breakpoints in the program you are testing: points where execution should stop. You can set a breakpoint at any stop point, as defined in section Using Edebug---even before a symbol. For setting and unsetting breakpoints, the stop point that is affected is the first one at or after point in the Edebug buffer. Here are the Edebug commands for breakpoints:

b
Set a breakpoint at the stop point at or after point. If you use a prefix argument, the breakpoint is temporary (it turns off the first time it stops the program).

u
Unset the breakpoint (if any) at the stop point at or after the current point.

x cond RET
Set a conditional breakpoint which stops the program only if cond evaluates to a non-nil value. If you use a prefix argument, the breakpoint is temporary (it turns off the first time it stops the program).

B
Move point to the next breakpoint in the current function definition.

While in Edebug, you can set a breakpoint with b (edebug-set-breakpoint) and unset one with u (edebug-unset-breakpoint). First you must move point to a position at or before the desired Edebug stop point, then hit the key to change the breakpoint. Unsetting a breakpoint that has not been set does nothing.

Reevaluating the function with edebug-defun clears all breakpoints in the function.

A conditional breakpoint tests a condition each time the program gets there, to decide whether to stop. To set a conditional breakpoint, use x, and specify the condition expression in the minibuffer.

You can make both conditional and unconditional breakpoints temporary by using a prefix arg to the command to set the breakpoint. After breaking at a temporary breakpoint, it is automatically cleared.

Edebug always stops or pauses at a breakpoint except when the Edebug mode is Go-nonstop. In that mode, it ignores breakpoints entirely.

To find out where your breakpoints are, use the B (edebug-next-breakpoint) command, which moves point to the next breakpoint in the function following point, or to the first breakpoint if there are no following breakpoints. This command does not continue execution--it just moves point in the buffer.

Views

These Edebug commands let you view aspects of the buffer and window status that obtained before entry to Edebug.

v
View the outside window configuration.

p
Temporarily display the outside current buffer with point at its outside position.

w
Switch back to the buffer showing the currently executing function, and move point back to the current stop point.

W
Forget the saved outside window configuration--so that the current window configuration will remain unchanged when you next exit Edebug (by continuing the program). Also toggle the edebug-save-windows variable.

Evaluation

While within Edebug, you can evaluate expressions "as if" Edebug were not running. Edebug tries to be invisible to the expression's evaluation.

e exp RET
Evaluate expression exp in the context outside of Edebug. That is, Edebug tries to avoid altering the effect of exp.

M-ESC exp RET
Evaluate expression exp in the context of Edebug itself.

C-x C-e
Evaluate the expression in the buffer before point, in the context outside of Edebug.

Evaluation List Buffer

You can use the evaluation list buffer, called `*edebug*', to evaluate expressions interactively. You can also set up the evaluation list of expressions to be evaluated automatically each time Edebug is reentered.

E
Switch to the evaluation list buffer `*edebug*'.

In the `*edebug*' buffer you can use the commands of Lisp Interaction as well as these special commands:

LFD
Evaluate the expression before point, in the context outside of Edebug, and insert the value in the buffer.

C-x C-e
Evaluate the expression before point, in the context outside of Edebug.

C-c C-u
Build a new evaluation list from the first expression of each group, reevaluate and redisplay. Groups are separated by a line starting with a comment.

C-c C-d
Delete the evaluation list group that point is in.

C-c C-w
Switch back to the Edebug buffer at the current stop point.

You can evaluate expressions in the evaluation list window with LFD or C-x C-e, just as you would in `*scratch*'; but they are evaluated in the context outside of Edebug.

The expressions you enter interactively (and their results) are lost when you continue execution of your function unless you add them to the evaluation list with C-c C-u (edebug-update-eval-list). This command builds a new list from the first expression of each evaluation list group. Groups are separated by a line starting with a comment.

When the evaluation list is redisplayed, each expression is displayed followed by the result of evaluating it, and a comment line. If an error occurs during an evaluation, the error message is displayed in a string as if it were the result. Therefore expressions that use variables not currently valid do not interrupt your debugging.

Here is an example of what the evaluation list window looks like after several expressions have been added to it:

(current-buffer)
#<buffer *scratch*>
;---------------------------------------------------------------
(point-min)
1
;---------------------------------------------------------------
(point-max)
2
;---------------------------------------------------------------
edebug-outside-point-max
"Symbol's value as variable is void: edebug-outside-point-max"
;---------------------------------------------------------------
(recursion-depth)
0
;---------------------------------------------------------------
this-command
eval-last-sexp
;---------------------------------------------------------------

To delete a group, move point into it and type C-c C-d (edebug-delete-eval-item), or simply delete the text for it and update the evaluation list with C-c C-u. When you add a new group, be sure to add a comment at the beginning.

After selecting `*edebug*', you can return to the source code buffer (the Edebug buffer) with C-c C-w. The *edebug* buffer is killed when you continue execution of your function, and recreated next time it is needed.

Printing

If the results of your expressions contain circular references to other parts of the same structure, you can print them more usefully with the `custom-print'.

To load the package and activate custom printing only for Edebug, simply use the command edebug-install-custom-print-funcs. Then set the variable print-circle to enable special handling of circular structure. To restore the standard print functions, use edebug-reset-print-funcs.

The Outside Context

Edebug tries to be transparent to the program you are debugging, but it does not succeed completely. In addition, most evaluations you do within Edebug (see section Evaluation) occur in the same outside context which is temporarily restored for the evaluation. This section explains precisely how use Edebug fails to be completely transparent.

Just Checking

Whenever Edebug is entered just to think about whether to take some action, it needs to save and restore certain data.

Outside Window Configuration

When Edebug needs to display something (e.g., in trace mode), it saves the current window configuration from "outside" Edebug (see section Window Configurations). When you exit Edebug (by continuing the program), it restores the previous window configuration.

Emacs redisplays only when it pauses. Usually, when you continue Edebug, the program comes back into Edebug at a breakpoint or after stepping, without pausing or reading input in between. In such cases, Emacs never gets a chance to redisplay the "outside" configuration. What you see is the window configuration for within Edebug, with no interruption.

The window configuration proper does not include which buffer is current or where point and mark are in the current buffer, but Edebug saves and restores these also.

Entry to Edebug for displaying something also saves and restores the following data. (Some of these variables are deliberately not restored if an error or quit signal occurs.)

Recursive Edit

When Edebug is entered and actually reads commands from the user, it saves (and later restores) these additional data:

Side Effects

Edebug operation unavoidably alters some data in Emacs, and this can interfere with debugging certain programs.

Macro Calls

When Edebug prepares for stepping through an expression that uses a Lisp macro, it needs additional advice to do the job properly. This is because there is no way to tell which parts of the macro call are forms to be evaluated. You must explain the format of calls to each macro to enable Edebug to handle it. To do this, use def-edebug-form-spec to define the format of calls to a given macro.

Macro: def-edebug-form-spec macro argpattern

Specify which parts of a call to macro macro are subexpressions to be evaluated. The second argument, argpattern, details what the argument list looks like.

Here is a table of the possibilities for argpattern and its subexpressions:

t
A list of any number of evaluated arguments.

0
A list of unevaluated arguments.

sexp
A single unevaluated object.

form
A single evaluated expression.

symbolp
An unevaluated symbol.

integerp
An unevaluated number.

stringp
An unevaluated string.

vectorp
An unevaluated vector.

atom
An unevaluated object that is not a cons cell.

function
A function argument: a quoted symbol, a quoted lambda expression, or a form (that should evaluate to a function or lambda expression). Edebug treats the body of a lambda expression treated as evaluated.

function
A function serves as a predicate--it designates the set of possible arguments for which it would return non-nil.

'object
The precise object object, treated as unevaluated.

(patterns)
A list whose elements are described by patterns. A sublist of the same format as the top level, processed recursively.

[patterns]
A sequence of arguments that are described by patterns.

&optional
This symbol serves as a flag saying that all following elements in the specification list at this level are optional. They may or may not match arguments; as soon as one does not match, processing of the specification list at this level terminates. To make just one item optional, use [&optional pattern].

&rest
This symbol serves as a flag saying that the following elements in the specification list at this level may be repeated, in order, zero or more times. Only one &rest may appear at the same level of a specification list, and &rest must not be followed by &optional.

To specify repetition of certain types of arguments, followed by dissimilar arguments, use [&rest patterns...].

&or
This symbol serves as an operator saying that the following elements in the specification list at this level are alternatives. To group two or more list elements as one alternative, bracket them in [...]. Only one &or may appear in a list, and it may not be followed by &optional or &rest. One of the alternatives must match, unless the &or is preceded by &optional or &rest.

If the actual arguments of a macro call fail to match the specification, taking account of alternatives, optional arguments and repeated arguments, Edebug reports a syntax error in use of the macro.

The combination of backtracking, &optional, &rest, &or, and [...] for grouping provides the equivalent of regular expressions. The (...) lists require balanced parentheses, which is the only context free (finite state with stack) construct supported.

Here are some examples of using def-edebug-form-spec. First, for the let special form:

(def-edebug-form-spec let
  '((&rest
    &or symbolp (symbolp &optional form))
   &rest form))

Here's the spec for the for loop macro (see section Common Problems Using Macros) and for the case and do macros in `cl.el':

(def-edebug-form-spec for
  '(symbolp 'from form 'to form 'do &rest form))

(def-edebug-form-spec case
  '(form &rest (sexp form)))

(def-edebug-form-spec do
  '((&rest &or symbolp (symbolp &optional form form))
    (form &rest form)
    &rest body))

Finally, the functions mapcar, mapconcat, mapatoms, apply, and funcall all take function arguments, and Edebug defines specifications for them. Here's one example:

(def-edebug-form-spec apply '(function &rest form))

The backquote (`) macro results in an expression that is not necessarily evaluated. Edebug cannot step through code generated by use of backquote.

Edebug Options

These options affect the behavior of Edebug:

User Option: edebug-all-defuns

If non-nil, normal evaluation of defun and defmacro forms prepares the functions and macros for stepping with Edebug. This applies to eval-defun, eval-region and eval-current-buffer.

The default value is nil.

User Option: edebug-stop-before-symbols

If non-nil, Edebug places stop points before symbols as well as after.

This option takes effect for a function when you prepare it for stepping with Edebug. Changing the option's value during execution of Edebug has no effect on the functions already set up for Edebug execution.

User Option: edebug-save-windows

If non-nil, save and restore window configuration on Edebug calls. It takes some time to save and restore, so if your program does not care what happens to the window configurations, it is better to set this variable to nil.

The default value is t.

User Option: edebug-save-point

If non-nil, Edebug saves and restores point and the mark in source code buffers. The default value is t.

User Option: edebug-save-displayed-buffer-points

If non-nil, save and restore point in all buffers when entering Edebug mode.

Saving and restoring point in other buffers is necessary if you are debugging code that changes the point of a buffer which is displayed in a non-selected window. If Edebug or the user then selects the window, the buffer's point will be changed to the window's point.

Saving and restoring is an expensive operation since it visits each window and each displayed buffer twice for each Edebug call, so it is best to avoid it if you can.

The default value is nil.

User Option: edebug-initial-mode

If this variable is non-nil, it specifies an Edebug mode to start in each time the program enters a new Edebug recursive-edit level. Possible values are step, go, Go-nonstop, trace, Trace-fast, continue, and Continue-fast.

The default value is step.

User Option: edebug-trace

Non-nil means display a trace of function entry and exit. Tracing output is displayed in a buffer named `*edebug-trace*', one function entry or exit per line, indented by the recursion level. You can customize this display by replacing the functions edebug-print-trace-entry and edebug-print-trace-exit.

The default value is nil.

Reading and Printing Lisp Objects

Printing and reading are the operations of converting Lisp objects to textual form and vice versa. They use the printed representations and read syntax described in section Lisp Data Types.

This chapter describes the Lisp functions for reading and printing. It also describes streams, which specify where to get the text (if reading) or where to put it (if printing).

Introduction to Reading and Printing

Reading a Lisp object means parsing a Lisp expression in textual form and producing a corresponding Lisp object. This is how Lisp programs get into Lisp from files of Lisp code. We call the text the read syntax of the object. For example, reading the text `(a . 5)' returns a cons cell whose CAR is a and whose CDR is the number 5.

Printing a Lisp object means producing text that represents that object--converting the object to its printed representation. Printing the cons cell described above produces the text `(a . 5)'.

Reading and printing are more or less inverse operations: printing the object that results from reading a given piece of text often produces the same text, and reading the text that results from printing an object usually produces a similar-looking object. For example, printing the symbol foo produces the text `foo', and reading that text returns the symbol foo. Printing a list whose elements are a and b produces the text `(a b)', and reading that text produces a list (but not the same list) with elements are a and b.

However, these two operations are not precisely inverses. There are two kinds of exceptions:

Input Streams

Most of the Lisp functions for reading text take an input stream as an argument. The input stream specifies where or how to get the characters of the text to be read. Here are the possible types of input stream:

buffer
The input characters are read from buffer, starting with the character directly after point. Point advances as characters are read.

marker
The input characters are read from the buffer that marker is in, starting with the character directly after the marker. The marker position advances as characters are read. The value of point in the buffer has no effect when the stream is a marker.

string
The input characters are taken from string, starting at the first character in the string and using as many characters as required.

function
The input characters are generated by function, one character per call. Normally function is called with no arguments, and should return a character.

Occasionally function is called with one argument (always a character). When that happens, function should save the argument and arrange to return it on the next call. This is called unreading the character; it happens when the Lisp reader reads one character too many and want to "put it back where it came from".

t
t used as a stream means that the input is read from the minibuffer. In fact, the minibuffer is invoked once and the text given by the user is made into a string that is then used as the input stream.

nil
nil used as a stream means that the value of standard-input should be used instead; that value is the default input stream, and must be a non-nil input stream.

symbol
A symbol as output stream is equivalent to the symbol's function definition (if any).

Here is an example of reading from a stream which is a buffer, showing where point is located before and after:

---------- Buffer: foo ----------
This-!- is the contents of foo.
---------- Buffer: foo ----------

(read (get-buffer "foo"))
     => is
(read (get-buffer "foo"))
     => the

---------- Buffer: foo ----------
This is the-!- contents of foo.
---------- Buffer: foo ----------

Note that the first read skips a space at the beginning of the buffer. Reading skips any amount of whitespace preceding the significant text.

In Emacs 18, reading a symbol discarded the delimiter terminating the symbol. Thus, point would end up at the beginning of `contents' rather than after `the'. The Emacs 19 behavior is superior because it correctly handles input such as `bar(foo)' where the delimiter that ends one object is needed as the beginning of another object.

Here is an example of reading from a stream that is a marker, initialized to point at the beginning of the buffer shown. The value read is the symbol This.


---------- Buffer: foo ----------
This is the contents of foo.
---------- Buffer: foo ----------

(setq m (set-marker (make-marker) 1 (get-buffer "foo")))
     => #<marker at 1 in foo>
(read m)
     => This
m
     => #<marker at 6 in foo>   ;; After the first space.

Here we read from the contents of a string:

(read "(When in) the course")
     => (When in)

The following example reads from the minibuffer. The prompt is: `Lisp expression: '. (That is always the prompt used when you read from the stream t.) The user's input is shown following the prompt.

(read t)
     => 23
---------- Buffer: Minibuffer ----------
Lisp expression: 23 RET
---------- Buffer: Minibuffer ----------

Finally, here is an example of a stream that is a function, named useless-stream. Before we use the stream, we initialize the variable useless-list to a list of characters. Then each call to the function useless-stream obtains the next characters in the list or unreads a character by adding it to the front of the list.

(setq useless-list (append "XY()" nil))
     => (88 89 40 41)

(defun useless-stream (&optional unread)
  (if unread
      (setq useless-list (cons unread useless-list))
    (prog1 (car useless-list)
           (setq useless-list (cdr useless-list)))))
     => useless-stream

Now we read using the stream thus constructed:

(read 'useless-stream)
     => XY

useless-list
     => (41)

Note that the close parenthesis remains in the list. The reader has read it, discovered that it ended the input, and unread it. Another attempt to read from the stream at this point would get an error due to the unmatched close parenthesis.

Function: get-file-char

This function is used internally as an input stream to read from the input file opened by the function load. Don't use this function yourself.

Input Functions

This section describes the Lisp functions and variables that pertain to reading.

In the functions below, stream stands for an input stream (see the previous section). If stream is nil or omitted, it defaults to the value of standard-input.

An end-of-file error results if an unterminated list or vector is found.

Function: read &optional stream

This function reads one textual Lisp expression from stream, returning it as a Lisp object. This is the basic Lisp input function.

Function: read-from-string string &optional start end

This function reads the first textual Lisp expression from the text in string. It returns a cons cell whose CAR is that expression, and whose CDR is an integer giving the position of the next remaining character in the string (i.e., the first one not read).

If start is supplied, then reading begins at index start in the string (where the first character is at index 0). If end is also supplied, then reading stops at that index as if the rest of the string were not there.

For example:

(read-from-string "(setq x 55) (setq y 5)")
     => ((setq x 55) . 11)
(read-from-string "\"A short string\"")
     => ("A short string" . 16)

;; Read starting at the first character.
(read-from-string "(list 112)" 0)
     => ((list 112) . 10)
;; Read starting at the second character.
(read-from-string "(list 112)" 1)
     => (list . 6)
;; Read starting at the seventh character,
;;   and stopping at the ninth.
(read-from-string "(list 112)" 6 8)
     => (11 . 8)

Variable: standard-input

This variable holds the default input stream: the stream that read uses when the stream argument is nil.

Output Streams

An output stream specifies what to do with the characters produced by printing. Most print functions accept an output stream as an optional argument. Here are the possible types of output stream:

buffer
The output characters are inserted into buffer at point. Point advances as characters are inserted.

marker
The output characters are inserted into the buffer that marker is in at the marker position. The position advances as characters are inserted. The value of point in the buffer has no effect when the stream is a marker.

function
The output characters are passed to function, which is responsible for storing them away. It is called with a single character as argument, as many times as there are characters to be output, and is free to do anything at all with the characters it receives.

t
The output characters are displayed in the echo area.

nil
nil specified as an output stream means that the value of standard-output should be used as the output stream; that value is the default output stream, and must be a non-nil output stream.

symbol
A symbol as output stream is equivalent to the symbol's function definition (if any).

Here is an example of a buffer used as an output stream. Point is initially located as shown immediately before the `h' in `the'. At the end, point is located directly before that same `h'.

---------- Buffer: foo ----------
This is t-!-he contents of foo.
---------- Buffer: foo ----------

(print "This is the output" (get-buffer "foo"))
     => "This is the output"

---------- Buffer: foo ----------
This is t
"This is the output"
-!-he contents of foo.
---------- Buffer: foo ----------

Now we show a use of a marker as an output stream. Initially, the marker points in buffer foo, between the `t' and the `h' in the word `the'. At the end, the marker has been advanced over the inserted text so that it still points before the same `h'. Note that the location of point, shown in the usual fashion, has no effect.

---------- Buffer: foo ----------
"This is the -!-output"
---------- Buffer: foo ----------

m
     => #<marker at 11 in foo>

(print "More output for foo." m)
     => "More output for foo."

---------- Buffer: foo ----------
"This is t
"More output for foo."
he -!-output"
---------- Buffer: foo ----------

m
     => #<marker at 35 in foo>

The following example shows output to the echo area:

(print "Echo Area output" t)
     => "Echo Area output"
---------- Echo Area ----------
"Echo Area output"
---------- Echo Area ----------

Finally, we show an output stream which is a function. The function eat-output takes each character that it is given and conses it onto the front of the list last-output (see section Building Cons Cells and Lists). At the end, the list contains all the characters output, but in reverse order.

(setq last-output nil)
     => nil

(defun eat-output (c)
  (setq last-output (cons c last-output)))
     => eat-output

(print "This is the output" 'eat-output)
     => "This is the output"

last-output
     => (10 34 116 117 112 116 117 111 32 101 104 
    116 32 115 105 32 115 105 104 84 34 10)

Now we can put the output in the proper order by reversing the list:

(concat (nreverse last-output))
     => "
\"This is the output\"
"

Output Functions

This section describes the Lisp functions for printing Lisp objects.

Some of the Emacs printing functions add quoting characters to the output when necessary so that it can be read properly. The quoting characters used are `\' and `"'; they are used to distinguish strings from symbols, and to prevent punctuation characters in strings and symbols from being taken as delimiters. See section Printed Representation and Read Syntax, for full details. You specify quoting or no quoting by the choice of printing function.

If the text is to be read back into Lisp, then it is best to print with quoting characters to avoid ambiguity. Likewise, if the purpose is to describe a Lisp object clearly for a Lisp programmer. However, if the purpose of the output is to look nice for humans, then it is better to print without quoting.

Printing a self-referent Lisp object requires an infinite amount of text. In certain cases, trying to produce this text leads to a stack overflow. Emacs detects such recursion and prints `#level' instead of recursively printing an object already being printed. For example, here `#0' indicates a recursive reference to the object at level 0 of the current print operation:

(setq foo (list nil))
     => (nil)
(setcar foo foo)
     => (#0)

In the functions below, stream stands for an output stream. (See the previous section for a description of output streams.) If stream is nil or omitted, it defaults to the value of standard-output.

Function: print object &optional stream

The print is a convenient way of printing. It outputs the printed representation of object to stream, printing in addition one newline before object and another after it. Quoting characters are used. print returns object. For example:

(progn (print 'The\ cat\ in)
       (print "the hat")
       (print " came back"))
     -| 
     -| The\ cat\ in
     -| 
     -| "the hat"
     -| 
     -| " came back"
     -| 
     => " came back"

Function: prin1 object &optional stream

This function outputs the printed representation of object to stream. It does not print any spaces or newlines to separate output as print does, but it does use quoting characters just like print. It returns object.

(progn (prin1 'The\ cat\ in) 
       (prin1 "the hat") 
       (prin1 " came back"))
     -| The\ cat\ in"the hat"" came back"
     => " came back"

Function: princ object &optional stream

This function outputs the printed representation of object to stream. It returns object.

This function is intended to produce output that is readable by people, not by read, so quoting characters are not used and double-quotes are not printed around the contents of strings. It does not add any spacing between calls.

(progn
  (princ 'The\ cat)
  (princ " in the \"hat\""))
     -| The cat in the "hat"
     => " in the \"hat\""

Function: terpri &optional stream

This function outputs a newline to stream. The name stands for "terminate print".

Function: write-char character &optional stream

This function outputs character to stream. It returns character.

Function: prin1-to-string object &optional noescape

This function returns a string containing the text that prin1 would have printed for the same argument.

(prin1-to-string 'foo)
     => "foo"
(prin1-to-string (mark-marker))
     => "#<marker at 2773 in strings.texi>"

If noescape is non-nil, that inhibits use of quoting characters in the output. (This argument is supported in Emacs versions 19 and later.)

(prin1-to-string "foo")
     => "\"foo\""
(prin1-to-string "foo" t)
     => "foo"

See format, in section Conversion of Characters and Strings, for other ways to obtain the printed representation of a Lisp object as a string.

Variables Affecting Output

Variable: standard-output

The value of this variable is the default output stream, used when the stream argument is omitted or nil.

Variable: print-escape-newlines

If this variable is non-nil, then newline characters in strings are printed as `\n'. Normally they are printed as actual newlines.

This variable affects the print functions prin1 and print, as well as everything that uses them. It does not affect princ. Here is an example using prin1:

(prin1 "a\nb")
     -| "a
     -| b"
     => "a
     => b"

(let ((print-escape-newlines t))
  (prin1 "a\nb"))
     -| "a\nb"
     => "a
     => b"

In the second expression, the local binding of print-escape-newlines is in effect during the call to prin1, but not during the printing of the result.

Variable: print-length

The value of this variable is the maximum number of elements of a list that will be printed. If the list being printed has more than this many elements, then it is abbreviated with an ellipsis.

If the value is nil (the default), then there is no limit.

(setq print-length 2)
     => 2
(print '(1 2 3 4 5))
     -| (1 2 ...)
     => (1 2 ...)

Variable: print-level

The value of this variable is the maximum depth of nesting of parentheses that will be printed. Any list or vector at a depth exceeding this limit is abbreviated with an ellipsis. A value of nil (which is the default) means no limit.

This variable exists in version 19 and later versions.

Minibuffers

A minibuffer is a special buffer that Emacs commands use to read arguments more complicated than the single numeric prefix argument. These arguments include file names, buffer names, and command names (as in M-x). The minibuffer is displayed on the bottom line of the screen, in the same place as the echo area, but only while it is in use for reading an argument.

Introduction to Minibuffers

In most ways, a minibuffer is a normal Emacs buffer. Most operations within a buffer, such as editing commands, work normally in a minibuffer. However, many operations for managing buffers do not apply to minibuffers. The name of a minibuffer always has the form ` *Minibuf-number', and it cannot be changed. Minibuffers are displayed only in special windows used only for minibuffers; these windows always appear at the bottom of a frame. (Sometime frames have no minibuffer window, and sometimes a special kind of frame contains nothing but a minibuffer window; see section Minibuffers and Frames.)

The minibuffers window is normally a single line; you can resize it temporarily with the window sizing commands, but reverts to its normal size when the minibuffer is exited.

A recursive minibuffer may be created when there is an active minibuffer and a command is invoked that requires input from a minibuffer. The first minibuffer is named ` *Minibuf-0*'. Recursive minibuffers are named by incrementing the number at the end of the name. (The names begin with a space so that they won't show up in normal buffer lists.) Of several recursive minibuffers, the innermost (or most recently entered) is the active minibuffer. We usually call this "the" minibuffer. You can permit or forbid recursive minibuffers by setting the variable enable-recursive-minibuffers or by putting properties of that name on command symbols (see section Minibuffer Miscellany).

Like other buffers, a minibuffer may use any of several local keymaps (see section Keymaps); these contain various exit commands and in some cases completion commands. See section Completion.

Reading Text Strings with the Minibuffer

The minibuffer is usually used to read text which is returned as a string, but can also be used to read a Lisp object in textual form. The most basic primitive for minibuffer input is read-from-minibuffer.

Function: read-from-minibuffer prompt-string &optional initial keymap read hist

This function is the most general way to get input through the minibuffer. By default, it accepts arbitrary text and returns it as a string; however, if read is non-nil, then it uses read to convert the text into a Lisp object (see section Input Functions).

The first thing this function does is to activate a minibuffer and display it with prompt-string as the prompt. This value must be a string.

Then, if initial is a string; its contents are inserted into the minibuffer as initial contents. The text thus inserted is treated as if the user had inserted it; the user can alter it with Emacs editing commands.

The value of initial may also be a cons cell of the form (string . position). This means to insert string in the minibuffer but put the cursor position characters from the beginning, rather than at the end.

If keymap is non-nil, that keymap is the local keymap to use while reading. If keymap is omitted or nil, the value of minibuffer-local-map is used as the keymap. Specifying a keymap is the most important way to customize minibuffer input for various applications including completion.

The argument hist specifies which history list variable to use for saving the input and for history commands used in the minibuffer. It defaults to minibuffer-history. See section Minibuffer History.

When the user types a command to exit the minibuffer, the current minibuffer contents are usually made into a string which becomes the value of read-from-minibuffer. However, if read is non-nil, read-from-