annotate lispref/objects.texi @ 69478:e8bb5df2ba7a

Add index entries around each paragraph rather than depend on entries from beginning of node. Doing so ensures that index entries are less likely to be forgotten if text is cut and pasted, and are necessary anyway if the references are on a separate page. It seems that makeinfo is now (v. 4.8) only producing one index entry per node, so there is no longer any excuse not to. Use subheading instead of heading. The incorrect use of heading produced very large fonts in Info--as large as the main heading. (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6 and 7 appeared *around* the time of these Emacs releases.
author Bill Wohler <wohler@newt.com>
date Wed, 15 Mar 2006 00:26:12 +0000
parents 067115a6e738
children 17275343ae24 c5406394f567
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
64889
e836425ee789 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 63763
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
68648
067115a6e738 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 67392
diff changeset
4 @c 2004, 2005, 2006 Free Software Foundation, Inc.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @c See the file elisp.texi for copying conditions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @setfilename ../info/objects
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
7 @node Lisp Data Types, Numbers, Introduction, Top
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @chapter Lisp Data Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 @cindex object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 @cindex Lisp object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 @cindex type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 @cindex data type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 A Lisp @dfn{object} is a piece of data used and manipulated by Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 programs. For our purposes, a @dfn{type} or @dfn{data type} is a set of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 possible objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 Every object belongs to at least one type. Objects of the same type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 have similar structures and may usually be used in the same contexts.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 Types can overlap, and objects can belong to two or more types.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 Consequently, we can ask whether an object belongs to a particular type,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 but not for ``the'' type of an object.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 @cindex primitive type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 A few fundamental object types are built into Emacs. These, from
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
26 which all other types are constructed, are called @dfn{primitive types}.
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
27 Each object belongs to one and only one primitive type. These types
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
28 include @dfn{integer}, @dfn{float}, @dfn{cons}, @dfn{symbol},
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
29 @dfn{string}, @dfn{vector}, @dfn{hash-table}, @dfn{subr}, and
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
30 @dfn{byte-code function}, plus several special types, such as
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
31 @dfn{buffer}, that are related to editing. (@xref{Editing Types}.)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 Each primitive type has a corresponding Lisp function that checks
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 whether an object is a member of that type.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 Note that Lisp is unlike many other languages in that Lisp objects are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 @dfn{self-typing}: the primitive type of the object is implicit in the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 object itself. For example, if an object is a vector, nothing can treat
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 it as a number; Lisp knows it is a vector, not a number.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 In most languages, the programmer must declare the data type of each
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 variable, and the type is known by the compiler but not represented in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 the data. Such type declarations do not exist in Emacs Lisp. A Lisp
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
44 variable can have any type of value, and it remembers whatever value
53294
850a63ebfead (Lisp Data Types): Mention that certain variables can only take on a
Luc Teirlinck <teirllm@auburn.edu>
parents: 53217
diff changeset
45 you store in it, type and all. (Actually, a small number of Emacs
850a63ebfead (Lisp Data Types): Mention that certain variables can only take on a
Luc Teirlinck <teirllm@auburn.edu>
parents: 53217
diff changeset
46 Lisp variables can only take on values of a certain type.
850a63ebfead (Lisp Data Types): Mention that certain variables can only take on a
Luc Teirlinck <teirllm@auburn.edu>
parents: 53217
diff changeset
47 @xref{Variables with Restricted Values}.)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 This chapter describes the purpose, printed representation, and read
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 syntax of each of the standard types in GNU Emacs Lisp. Details on how
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 to use these types can be found in later chapters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 * Printed Representation:: How Lisp objects are represented as text.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 * Comments:: Comments and their formatting conventions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 * Programming Types:: Types found in all Lisp systems.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 * Editing Types:: Types specific to Emacs.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
58 * Circular Objects:: Read syntax for circular structure.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 * Type Predicates:: Tests related to types.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 * Equality Predicates:: Tests of equality between any two objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 @node Printed Representation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 @section Printed Representation and Read Syntax
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 @cindex printed representation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 @cindex read syntax
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 The @dfn{printed representation} of an object is the format of the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 output generated by the Lisp printer (the function @code{prin1}) for
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
71 that object. Every data type has a unique printed representation.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
72 The @dfn{read syntax} of an object is the format of the input accepted
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
73 by the Lisp reader (the function @code{read}) for that object. This
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
74 is not necessarily unique; many kinds of object have more than one
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
75 syntax. @xref{Read and Print}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
76
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
77 @cindex hash notation
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
78 In most cases, an object's printed representation is also a read
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
79 syntax for the object. However, some types have no read syntax, since
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
80 it does not make sense to enter objects of these types as constants in
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
81 a Lisp program. These objects are printed in @dfn{hash notation},
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
82 which consists of the characters @samp{#<}, a descriptive string
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
83 (typically the type name followed by the name of the object), and a
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
84 closing @samp{>}. For example:
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
85
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
86 @example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
87 (current-buffer)
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
88 @result{} #<buffer objects.texi>
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
89 @end example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
90
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
91 @noindent
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
92 Hash notation cannot be read at all, so the Lisp reader signals the
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
93 error @code{invalid-read-syntax} whenever it encounters @samp{#<}.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
94 @kindex invalid-read-syntax
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 In other languages, an expression is text; it has no other form. In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 Lisp, an expression is primarily a Lisp object and only secondarily the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 text that is the object's read syntax. Often there is no need to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 emphasize this distinction, but you must keep it in the back of your
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 mind, or you will occasionally be very confused.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 When you evaluate an expression interactively, the Lisp interpreter
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 first reads the textual representation of it, producing a Lisp object,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 and then evaluates that object (@pxref{Evaluation}). However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 evaluation and reading are separate activities. Reading returns the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 Lisp object represented by the text that is read; the object may or may
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 not be evaluated later. @xref{Input Functions}, for a description of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 @code{read}, the basic function for reading objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 @node Comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 @section Comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 @cindex comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 @cindex @samp{;} in comment
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 A @dfn{comment} is text that is written in a program only for the sake
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 of humans that read the program, and that has no effect on the meaning
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 of the program. In Lisp, a semicolon (@samp{;}) starts a comment if it
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 is not within a string or character constant. The comment continues to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 the end of line. The Lisp reader discards comments; they do not become
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 part of the Lisp objects which represent the program within the Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 system.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
124 The @samp{#@@@var{count}} construct, which skips the next @var{count}
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
125 characters, is useful for program-generated comments containing binary
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
126 data. The Emacs Lisp byte compiler uses this in its output files
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
127 (@pxref{Byte Compilation}). It isn't meant for source files, however.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
128
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 @xref{Comment Tips}, for conventions for formatting comments.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 @node Programming Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 @section Programming Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 @cindex programming types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 There are two general categories of types in Emacs Lisp: those having
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 to do with Lisp programming, and those having to do with editing. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 former exist in many Lisp implementations, in one form or another. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 latter are unique to Emacs Lisp.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 * Integer Type:: Numbers without fractional parts.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 * Floating Point Type:: Numbers with fractional parts and with a large range.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 * Character Type:: The representation of letters, numbers and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 control characters.
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
145 * Symbol Type:: A multi-use object that refers to a function,
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
146 variable, or property list, and has a unique identity.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 * Sequence Type:: Both lists and arrays are classified as sequences.
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
148 * Cons Cell Type:: Cons cells, and lists (which are made from cons cells).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 * Array Type:: Arrays include strings and vectors.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 * String Type:: An (efficient) array of characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 * Vector Type:: One-dimensional arrays.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
152 * Char-Table Type:: One-dimensional sparse arrays indexed by characters.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
153 * Bool-Vector Type:: One-dimensional arrays of @code{t} or @code{nil}.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
154 * Hash Table Type:: Super-fast lookup tables.
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
155 * Function Type:: A piece of executable code you can call from elsewhere.
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
156 * Macro Type:: A method of expanding an expression into another
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 expression, more fundamental but less pretty.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 * Primitive Function Type:: A function written in C, callable from Lisp.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 * Byte-Code Type:: A function written in Lisp, then compiled.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 * Autoload Type:: A type used for automatically loading seldom-used
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 functions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 @node Integer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 @subsection Integer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
167 The range of values for integers in Emacs Lisp is @minus{}268435456 to
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
168 268435455 (29 bits; i.e.,
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
169 @ifnottex
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
170 -2**28
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
171 @end ifnottex
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 @tex
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
173 @math{-2^{28}}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 @end tex
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 to
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
176 @ifnottex
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
177 2**28 - 1)
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
178 @end ifnottex
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
180 @math{2^{28}-1})
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 @end tex
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
182 on most machines. (Some machines may provide a wider range.) It is
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
183 important to note that the Emacs Lisp arithmetic functions do not check
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
184 for overflow. Thus @code{(1+ 268435455)} is @minus{}268435456 on most
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
185 machines.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
187 The read syntax for integers is a sequence of (base ten) digits with an
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 optional sign at the beginning and an optional period at the end. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 printed representation produced by the Lisp interpreter never has a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 leading @samp{+} or a final @samp{.}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 -1 ; @r{The integer -1.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 1 ; @r{The integer 1.}
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
196 1. ; @r{Also the integer 1.}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 +1 ; @r{Also the integer 1.}
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
198 536870913 ; @r{Also the integer 1 on a 29-bit implementation.}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 @xref{Numbers}, for more information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 @node Floating Point Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 @subsection Floating Point Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
36987
3a9bdf46b7db Floating point is always available; say a little about what it is.
Richard M. Stallman <rms@gnu.org>
parents: 35477
diff changeset
207 Floating point numbers are the computer equivalent of scientific
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
208 notation; you can think of a floating point number as a fraction
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
209 together with a power of ten. The precise number of significant
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
210 figures and the range of possible exponents is machine-specific; Emacs
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
211 uses the C data type @code{double} to store the value, and internally
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
212 this records a power of 2 rather than a power of 10.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 The printed representation for floating point numbers requires either
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 a decimal point (with at least one digit following), an exponent, or
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 @samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 number whose value is 1500. They are all equivalent.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 @xref{Numbers}, for more information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 @node Character Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 @subsection Character Type
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
224 @cindex @acronym{ASCII} character codes
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 A @dfn{character} in Emacs Lisp is nothing more than an integer. In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 other words, characters are represented by their character codes. For
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 example, the character @kbd{A} is represented as the @w{integer 65}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 Individual characters are not often used in programs. It is far more
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 common to work with @emph{strings}, which are sequences composed of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 characters. @xref{String Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
234 Characters in strings, buffers, and files are currently limited to
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
235 the range of 0 to 524287---nineteen bits. But not all values in that
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
236 range are valid character codes. Codes 0 through 127 are
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
237 @acronym{ASCII} codes; the rest are non-@acronym{ASCII}
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
238 (@pxref{Non-ASCII Characters}). Characters that represent keyboard
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
239 input have a much wider range, to encode modifier keys such as
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
240 Control, Meta and Shift.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 @cindex read syntax for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 @cindex printed representation for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 @cindex syntax for characters
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
245 @cindex @samp{?} in character constant
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
246 @cindex question mark in character constant
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 Since characters are really integers, the printed representation of a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 character is a decimal number. This is also a possible read syntax for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 a character, but writing characters that way in Lisp programs is a very
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 bad idea. You should @emph{always} use the special read syntax formats
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 that Emacs Lisp provides for characters. These syntax formats start
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 with a question mark.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 The usual read syntax for alphanumeric characters is a question mark
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 followed by the character; thus, @samp{?A} for the character
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 @kbd{A}, @samp{?B} for the character @kbd{B}, and @samp{?a} for the
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
257 character @kbd{a}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 For example:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ?Q @result{} 81 ?q @result{} 113
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 You can use the same syntax for punctuation characters, but it is
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
266 often a good idea to add a @samp{\} so that the Emacs commands for
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
267 editing Lisp code don't get confused. For example, @samp{?\(} is the
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
268 way to write the open-paren character. If the character is @samp{\},
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
269 you @emph{must} use a second @samp{\} to quote it: @samp{?\\}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 @cindex whitespace
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 @cindex bell character
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 @cindex @samp{\a}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 @cindex backspace
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 @cindex @samp{\b}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 @cindex tab
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 @cindex @samp{\t}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @cindex vertical tab
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 @cindex @samp{\v}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 @cindex formfeed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 @cindex @samp{\f}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 @cindex newline
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 @cindex @samp{\n}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 @cindex return
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 @cindex @samp{\r}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 @cindex escape
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 @cindex @samp{\e}
49767
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
288 @cindex space
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
289 @cindex @samp{\s}
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
290 You can express the characters control-g, backspace, tab, newline,
49767
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
291 vertical tab, formfeed, space, return, del, and escape as @samp{?\a},
37418
1c8b0cb32917 Fully document \d.
Richard M. Stallman <rms@gnu.org>
parents: 36987
diff changeset
292 @samp{?\b}, @samp{?\t}, @samp{?\n}, @samp{?\v}, @samp{?\f},
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
293 @samp{?\s}, @samp{?\r}, @samp{?\d}, and @samp{?\e}, respectively.
67392
e81ec3b1003b (Character Type): Clarify that \s is not space if a dash follows.
Richard M. Stallman <rms@gnu.org>
parents: 65539
diff changeset
294 (@samp{?\s} followed by a dash has a different meaning---it applies
e81ec3b1003b (Character Type): Clarify that \s is not space if a dash follows.
Richard M. Stallman <rms@gnu.org>
parents: 65539
diff changeset
295 the ``super'' modifier to the following character.) Thus,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 @example
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
298 ?\a @result{} 7 ; @r{control-g, @kbd{C-g}}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 ?\b @result{} 8 ; @r{backspace, @key{BS}, @kbd{C-h}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ?\t @result{} 9 ; @r{tab, @key{TAB}, @kbd{C-i}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
301 ?\n @result{} 10 ; @r{newline, @kbd{C-j}}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 ?\v @result{} 11 ; @r{vertical tab, @kbd{C-k}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ?\f @result{} 12 ; @r{formfeed character, @kbd{C-l}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 ?\r @result{} 13 ; @r{carriage return, @key{RET}, @kbd{C-m}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ?\e @result{} 27 ; @r{escape character, @key{ESC}, @kbd{C-[}}
49767
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
306 ?\s @result{} 32 ; @r{space character, @key{SPC}}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 ?\\ @result{} 92 ; @r{backslash character, @kbd{\}}
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
308 ?\d @result{} 127 ; @r{delete character, @key{DEL}}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 @cindex escape sequence
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 These sequences which start with backslash are also known as
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
313 @dfn{escape sequences}, because backslash plays the role of an
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
314 ``escape character''; this terminology has nothing to do with the
67392
e81ec3b1003b (Character Type): Clarify that \s is not space if a dash follows.
Richard M. Stallman <rms@gnu.org>
parents: 65539
diff changeset
315 character @key{ESC}. @samp{\s} is meant for use in character
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
316 constants; in string constants, just write the space.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 @cindex control characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 Control characters may be represented using yet another read syntax.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 This consists of a question mark followed by a backslash, caret, and the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 corresponding non-control character, in either upper or lower case. For
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 example, both @samp{?\^I} and @samp{?\^i} are valid read syntax for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 character @kbd{C-i}, the character whose value is 9.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 Instead of the @samp{^}, you can use @samp{C-}; thus, @samp{?\C-i} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 equivalent to @samp{?\^I} and to @samp{?\^i}:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 ?\^I @result{} 9 ?\C-I @result{} 9
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
332 In strings and buffers, the only control characters allowed are those
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
333 that exist in @acronym{ASCII}; but for keyboard input purposes, you can turn
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
334 any character into a control character with @samp{C-}. The character
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
335 codes for these non-@acronym{ASCII} control characters include the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
336 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
337 @math{2^{26}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
338 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
339 @ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
340 2**26
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
341 @end ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
342 bit as well as the code for the corresponding non-control
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
343 character. Ordinary terminals have no way of generating non-@acronym{ASCII}
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
344 control characters, but you can generate them straightforwardly using X
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
345 and other window systems.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
347 For historical reasons, Emacs treats the @key{DEL} character as
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
348 the control equivalent of @kbd{?}:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 ?\^? @result{} 127 ?\C-? @result{} 127
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
354 @noindent
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
355 As a result, it is currently not possible to represent the character
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
356 @kbd{Control-?}, which is a meaningful input character under X, using
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
357 @samp{\C-}. It is not easy to change this, as various Lisp files refer
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
358 to @key{DEL} in this way.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
359
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 For representing control characters to be found in files or strings,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 we recommend the @samp{^} syntax; for control characters in keyboard
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
362 input, we prefer the @samp{C-} syntax. Which one you use does not
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
363 affect the meaning of the program, but may guide the understanding of
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
364 people who read it.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 @cindex meta characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 A @dfn{meta character} is a character typed with the @key{META}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 modifier key. The integer that represents such a character has the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
369 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
370 @math{2^{27}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
371 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
372 @ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
373 2**27
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
374 @end ifnottex
52909
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
375 bit set. We use high bits for this and other modifiers to make
8b6f25832ac6 (Integer Type): Update for extra bit of integer range.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
376 possible a wide range of basic character codes.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
378 In a string, the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
379 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
380 @math{2^{7}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
381 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
382 @ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
383 2**7
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
384 @end ifnottex
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
385 bit attached to an @acronym{ASCII} character indicates a meta
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
386 character; thus, the meta characters that can fit in a string have
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
387 codes in the range from 128 to 255, and are the meta versions of the
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
388 ordinary @acronym{ASCII} characters. (In Emacs versions 18 and older,
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
389 this convention was used for characters outside of strings as well.)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 The read syntax for meta characters uses @samp{\M-}. For example,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 @samp{?\M-A} stands for @kbd{M-A}. You can use @samp{\M-} together with
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
393 octal character codes (see below), with @samp{\C-}, or with any other
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
394 syntax for a character. Thus, you can write @kbd{M-A} as @samp{?\M-A},
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
395 or as @samp{?\M-\101}. Likewise, you can write @kbd{C-M-b} as
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
396 @samp{?\M-\C-b}, @samp{?\C-\M-b}, or @samp{?\M-\002}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
398 The case of a graphic character is indicated by its character code;
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
399 for example, @acronym{ASCII} distinguishes between the characters @samp{a}
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
400 and @samp{A}. But @acronym{ASCII} has no way to represent whether a control
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
401 character is upper case or lower case. Emacs uses the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
402 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
403 @math{2^{25}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
404 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
405 @ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
406 2**25
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
407 @end ifnottex
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
408 bit to indicate that the shift key was used in typing a control
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
409 character. This distinction is possible only when you use X terminals
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
410 or other special terminals; ordinary terminals do not report the
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
411 distinction to the computer in any way. The Lisp syntax for
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
412 the shift bit is @samp{\S-}; thus, @samp{?\C-\S-o} or @samp{?\C-\S-O}
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
413 represents the shifted-control-o character.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 @cindex hyper characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 @cindex super characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 @cindex alt characters
56632
ae78f1a0047f (Character Type): Reposition `@anchor' to prevent double space inside
Luc Teirlinck <teirllm@auburn.edu>
parents: 54037
diff changeset
418 The X Window System defines three other
ae78f1a0047f (Character Type): Reposition `@anchor' to prevent double space inside
Luc Teirlinck <teirllm@auburn.edu>
parents: 54037
diff changeset
419 @anchor{modifier bits}modifier bits that can be set
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 in a character: @dfn{hyper}, @dfn{super} and @dfn{alt}. The syntaxes
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
421 for these bits are @samp{\H-}, @samp{\s-} and @samp{\A-}. (Case is
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
422 significant in these prefixes.) Thus, @samp{?\H-\M-\A-x} represents
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
423 @kbd{Alt-Hyper-Meta-x}. (Note that @samp{\s} with no following @samp{-}
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
424 represents the space character.)
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
425 @tex
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
426 Numerically, the bit values are @math{2^{22}} for alt, @math{2^{23}}
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
427 for super and @math{2^{24}} for hyper.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
428 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
429 @ifnottex
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
430 Numerically, the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
431 bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
432 @end ifnottex
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 @cindex @samp{\} in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 @cindex backslash in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 @cindex octal character code
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
437 Finally, the most general read syntax for a character represents the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
438 character code in either octal or hex. To use octal, write a question
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
439 mark followed by a backslash and the octal character code (up to three
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 octal digits); thus, @samp{?\101} for the character @kbd{A},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 @samp{?\001} for the character @kbd{C-a}, and @code{?\002} for the
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
442 character @kbd{C-b}. Although this syntax can represent any @acronym{ASCII}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 character, it is preferred only when the precise octal value is more
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
444 important than the @acronym{ASCII} representation.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 ?\012 @result{} 10 ?\n @result{} 10 ?\C-j @result{} 10
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ?\101 @result{} 65 ?A @result{} 65
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
453 To use hex, write a question mark followed by a backslash, @samp{x},
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
454 and the hexadecimal character code. You can use any number of hex
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
455 digits, so you can represent any character code in this way.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
456 Thus, @samp{?\x41} for the character @kbd{A}, @samp{?\x1} for the
35477
e6bffd5c5287 *** empty log message ***
Dave Love <fx@gnu.org>
parents: 35111
diff changeset
457 character @kbd{C-a}, and @code{?\x8e0} for the Latin-1 character
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
458 @iftex
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
459 @samp{@`a}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
460 @end iftex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
461 @ifnottex
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
462 @samp{a} with grave accent.
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
463 @end ifnottex
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
464
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 A backslash is allowed, and harmless, preceding any character without
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 a special escape meaning; thus, @samp{?\+} is equivalent to @samp{?+}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 There is no reason to add a backslash before most characters. However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 you should add a backslash before any of the characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 @samp{()\|;'`"#.,} to avoid confusing the Emacs commands for editing
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
470 Lisp code. You can also add a backslash before whitespace characters such as
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 space, tab, newline and formfeed. However, it is cleaner to use one of
49767
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
472 the easily readable escape sequences, such as @samp{\t} or @samp{\s},
4a50d348a2b1 (Character Type): New \s escape for space.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
473 instead of an actual whitespace character such as a tab or a space.
51991
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
474 (If you do write backslash followed by a space, you should write
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
475 an extra space after the character constant to separate it from the
7c793b188969 (Character Type): Don't use space as example for \.
Richard M. Stallman <rms@gnu.org>
parents: 51644
diff changeset
476 following text.)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
478 @node Symbol Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
479 @subsection Symbol Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
480
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
481 A @dfn{symbol} in GNU Emacs Lisp is an object with a name. The
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
482 symbol name serves as the printed representation of the symbol. In
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
483 ordinary Lisp use, with one single obarray (@pxref{Creating Symbols},
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
484 a symbol's name is unique---no two symbols have the same name.
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
485
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
486 A symbol can serve as a variable, as a function name, or to hold a
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
487 property list. Or it may serve only to be distinct from all other Lisp
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
488 objects, so that its presence in a data structure may be recognized
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
489 reliably. In a given context, usually only one of these uses is
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
490 intended. But you can use one symbol in all of these ways,
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
491 independently.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
492
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
493 A symbol whose name starts with a colon (@samp{:}) is called a
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
494 @dfn{keyword symbol}. These symbols automatically act as constants, and
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
495 are normally used only by comparing an unknown symbol with a few
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
496 specific alternatives.
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
497
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
498 @cindex @samp{\} in symbols
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
499 @cindex backslash in symbols
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
500 A symbol name can contain any characters whatever. Most symbol names
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
501 are written with letters, digits, and the punctuation characters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
502 @samp{-+=*/}. Such names require no special punctuation; the characters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
503 of the name suffice as long as the name does not look like a number.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
504 (If it does, write a @samp{\} at the beginning of the name to force
31561
b441ceb31859 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27528
diff changeset
505 interpretation as a symbol.) The characters @samp{_~!@@$%^&:<>@{@}?} are
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
506 less often used but also require no special punctuation. Any other
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
507 characters may be included in a symbol's name by escaping them with a
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
508 backslash. In contrast to its use in strings, however, a backslash in
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
509 the name of a symbol simply quotes the single character that follows the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
510 backslash. For example, in a string, @samp{\t} represents a tab
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
511 character; in the name of a symbol, however, @samp{\t} merely quotes the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
512 letter @samp{t}. To have a symbol with a tab character in its name, you
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
513 must actually use a tab (preceded with a backslash). But it's rare to
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
514 do such a thing.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
515
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
516 @cindex CL note---case of letters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
517 @quotation
7734
2d4db32cccd5 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7337
diff changeset
518 @b{Common Lisp note:} In Common Lisp, lower case letters are always
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
519 ``folded'' to upper case, unless they are explicitly escaped. In Emacs
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
520 Lisp, upper case and lower case letters are distinct.
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
521 @end quotation
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
522
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
523 Here are several examples of symbol names. Note that the @samp{+} in
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
524 the fifth example is escaped to prevent it from being read as a number.
60008
a4cde3df094b (Symbol Type): Minor correction.
Richard M. Stallman <rms@gnu.org>
parents: 56632
diff changeset
525 This is not necessary in the fourth example because the rest of the name
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
526 makes it invalid as a number.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
527
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
528 @example
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
529 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
530 foo ; @r{A symbol named @samp{foo}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
531 FOO ; @r{A symbol named @samp{FOO}, different from @samp{foo}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
532 char-to-string ; @r{A symbol named @samp{char-to-string}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
533 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
534 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
535 1+ ; @r{A symbol named @samp{1+}}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
536 ; @r{(not @samp{+1}, which is an integer).}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
537 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
538 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
539 \+1 ; @r{A symbol named @samp{+1}}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
540 ; @r{(not a very readable name).}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
541 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
542 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
543 \(*\ 1\ 2\) ; @r{A symbol named @samp{(* 1 2)} (a worse name).}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
544 @c the @'s in this next line use up three characters, hence the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
545 @c apparent misalignment of the comment.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
546 +-*/_~!@@$%^&=:<>@{@} ; @r{A symbol named @samp{+-*/_~!@@$%^&=:<>@{@}}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
547 ; @r{These characters need not be escaped.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
548 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
549 @end example
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
550
44089
a8d9fd32a154 (Symbol Type): Use `colon' in index entries instead of `:' only in Info.
Eli Zaretskii <eliz@gnu.org>
parents: 43888
diff changeset
551 @ifinfo
43888
b777a45900bb (Symbol Type): Avoid makeinfo warning about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 38940
diff changeset
552 @c This uses ``colon'' instead of a literal `:' because Info cannot
b777a45900bb (Symbol Type): Avoid makeinfo warning about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 38940
diff changeset
553 @c cope with a `:' in a menu
b777a45900bb (Symbol Type): Avoid makeinfo warning about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 38940
diff changeset
554 @cindex @samp{#@var{colon}} read syntax
44089
a8d9fd32a154 (Symbol Type): Use `colon' in index entries instead of `:' only in Info.
Eli Zaretskii <eliz@gnu.org>
parents: 43888
diff changeset
555 @end ifinfo
a8d9fd32a154 (Symbol Type): Use `colon' in index entries instead of `:' only in Info.
Eli Zaretskii <eliz@gnu.org>
parents: 43888
diff changeset
556 @ifnotinfo
a8d9fd32a154 (Symbol Type): Use `colon' in index entries instead of `:' only in Info.
Eli Zaretskii <eliz@gnu.org>
parents: 43888
diff changeset
557 @cindex @samp{#:} read syntax
a8d9fd32a154 (Symbol Type): Use `colon' in index entries instead of `:' only in Info.
Eli Zaretskii <eliz@gnu.org>
parents: 43888
diff changeset
558 @end ifnotinfo
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
559 Normally the Lisp reader interns all symbols (@pxref{Creating
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
560 Symbols}). To prevent interning, you can write @samp{#:} before the
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
561 name of the symbol.
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
562
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 @node Sequence Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 @subsection Sequence Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 A @dfn{sequence} is a Lisp object that represents an ordered set of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 elements. There are two kinds of sequence in Emacs Lisp, lists and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 arrays. Thus, an object of type list or of type array is also
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 considered a sequence.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
571 Arrays are further subdivided into strings, vectors, char-tables and
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
572 bool-vectors. Vectors can hold elements of any type, but string
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
573 elements must be characters, and bool-vector elements must be @code{t}
35111
b1adf7e27ea8 Minor fix because a bool-vector's elements can't be characters.
Richard M. Stallman <rms@gnu.org>
parents: 31561
diff changeset
574 or @code{nil}. Char-tables are like vectors except that they are
b1adf7e27ea8 Minor fix because a bool-vector's elements can't be characters.
Richard M. Stallman <rms@gnu.org>
parents: 31561
diff changeset
575 indexed by any valid character code. The characters in a string can
b1adf7e27ea8 Minor fix because a bool-vector's elements can't be characters.
Richard M. Stallman <rms@gnu.org>
parents: 31561
diff changeset
576 have text properties like characters in a buffer (@pxref{Text
b1adf7e27ea8 Minor fix because a bool-vector's elements can't be characters.
Richard M. Stallman <rms@gnu.org>
parents: 31561
diff changeset
577 Properties}), but vectors do not support text properties, even when
b1adf7e27ea8 Minor fix because a bool-vector's elements can't be characters.
Richard M. Stallman <rms@gnu.org>
parents: 31561
diff changeset
578 their elements happen to be characters.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
580 Lists, strings and the other array types are different, but they have
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
581 important similarities. For example, all have a length @var{l}, and all
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
582 have elements which can be indexed from zero to @var{l} minus one.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
583 Several functions, called sequence functions, accept any kind of
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 sequence. For example, the function @code{elt} can be used to extract
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 an element of a sequence, given its index. @xref{Sequences Arrays
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 Vectors}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
588 It is generally impossible to read the same sequence twice, since
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
589 sequences are always created anew upon reading. If you read the read
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
590 syntax for a sequence twice, you get two sequences with equal contents.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
591 There is one exception: the empty list @code{()} always stands for the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
592 same object, @code{nil}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
594 @node Cons Cell Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
595 @subsection Cons Cell and List Types
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 @cindex address field of register
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 @cindex decrement field of register
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
598 @cindex pointers
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
600 A @dfn{cons cell} is an object that consists of two slots, called the
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
601 @sc{car} slot and the @sc{cdr} slot. Each slot can @dfn{hold} or
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
602 @dfn{refer to} any Lisp object. We also say that ``the @sc{car} of
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
603 this cons cell is'' whatever object its @sc{car} slot currently holds,
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
604 and likewise for the @sc{cdr}.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
605
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
606 @quotation
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
607 A note to C programmers: in Lisp, we do not distinguish between
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
608 ``holding'' a value and ``pointing to'' the value, because pointers in
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
609 Lisp are implicit.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
610 @end quotation
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
611
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
612 A @dfn{list} is a series of cons cells, linked together so that the
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
613 @sc{cdr} slot of each cons cell holds either the next cons cell or the
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
614 empty list. The empty list is actually the symbol @code{nil}.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
615 @xref{Lists}, for functions that work on lists. Because most cons
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
616 cells are used as part of lists, the phrase @dfn{list structure} has
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
617 come to refer to any structure made out of cons cells.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
618
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
619 @cindex atom
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
620 Because cons cells are so central to Lisp, we also have a word for
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
621 ``an object which is not a cons cell''. These objects are called
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
622 @dfn{atoms}.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
623
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
624 @cindex parenthesis
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
625 @cindex @samp{(@dots{})} in lists
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
626 The read syntax and printed representation for lists are identical, and
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
627 consist of a left parenthesis, an arbitrary number of elements, and a
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
628 right parenthesis. Here are examples of lists:
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
629
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
630 @example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
631 (A 2 "A") ; @r{A list of three elements.}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
632 () ; @r{A list of no elements (the empty list).}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
633 nil ; @r{A list of no elements (the empty list).}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
634 ("A ()") ; @r{A list of one element: the string @code{"A ()"}.}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
635 (A ()) ; @r{A list of two elements: @code{A} and the empty list.}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
636 (A nil) ; @r{Equivalent to the previous.}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
637 ((A B C)) ; @r{A list of one element}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
638 ; @r{(which is a list of three elements).}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
639 @end example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
640
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
641 Upon reading, each object inside the parentheses becomes an element
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
642 of the list. That is, a cons cell is made for each element. The
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
643 @sc{car} slot of the cons cell holds the element, and its @sc{cdr}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
644 slot refers to the next cons cell of the list, which holds the next
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
645 element in the list. The @sc{cdr} slot of the last cons cell is set to
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
646 hold @code{nil}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
648 The names @sc{car} and @sc{cdr} derive from the history of Lisp. The
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 original Lisp implementation ran on an @w{IBM 704} computer which
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 divided words into two parts, called the ``address'' part and the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 ``decrement''; @sc{car} was an instruction to extract the contents of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 the address part of a register, and @sc{cdr} an instruction to extract
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 the contents of the decrement. By contrast, ``cons cells'' are named
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
654 for the function @code{cons} that creates them, which in turn was named
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 for its purpose, the construction of cells.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
657 @menu
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
658 * Box Diagrams:: Drawing pictures of lists.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
659 * Dotted Pair Notation:: A general syntax for cons cells.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
660 * Association List Type:: A specially constructed list.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
661 @end menu
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
663 @node Box Diagrams
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
664 @subsubsection Drawing Lists as Box Diagrams
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 @cindex box diagrams, for lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 @cindex diagrams, boxed, for lists
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
667
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 A list can be illustrated by a diagram in which the cons cells are
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
669 shown as pairs of boxes, like dominoes. (The Lisp reader cannot read
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
670 such an illustration; unlike the textual notation, which can be
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
671 understood by both humans and computers, the box illustrations can be
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
672 understood only by humans.) This picture represents the three-element
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
673 list @code{(rose violet buttercup)}:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
677 --- --- --- --- --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
678 | | |--> | | |--> | | |--> nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
679 --- --- --- --- --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 --> rose --> violet --> buttercup
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
686 In this diagram, each box represents a slot that can hold or refer to
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
687 any Lisp object. Each pair of boxes represents a cons cell. Each arrow
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
688 represents a reference to a Lisp object, either an atom or another cons
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
689 cell.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
691 In this example, the first box, which holds the @sc{car} of the first
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
692 cons cell, refers to or ``holds'' @code{rose} (a symbol). The second
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
693 box, holding the @sc{cdr} of the first cons cell, refers to the next
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
694 pair of boxes, the second cons cell. The @sc{car} of the second cons
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
695 cell is @code{violet}, and its @sc{cdr} is the third cons cell. The
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
696 @sc{cdr} of the third (and last) cons cell is @code{nil}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
698 Here is another diagram of the same list, @code{(rose violet
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 buttercup)}, sketched in a different manner:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 @smallexample
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 --------------- ---------------- -------------------
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 | car | cdr | | car | cdr | | car | cdr |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 | rose | o-------->| violet | o-------->| buttercup | nil |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 | | | | | | | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 --------------- ---------------- -------------------
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 @end smallexample
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 @cindex @code{nil} in lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 @cindex empty list
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 A list with no elements in it is the @dfn{empty list}; it is identical
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 to the symbol @code{nil}. In other words, @code{nil} is both a symbol
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 and a list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 Here is the list @code{(A ())}, or equivalently @code{(A nil)},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 depicted with boxes and arrows:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
722 --- --- --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
723 | | |--> | | |--> nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
724 --- --- --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 --> A --> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
731 Here is a more complex illustration, showing the three-element list,
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
732 @code{((pine needles) oak maple)}, the first element of which is a
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
733 two-element list:
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
734
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
735 @example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
736 @group
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
737 --- --- --- --- --- ---
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
738 | | |--> | | |--> | | |--> nil
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
739 --- --- --- --- --- ---
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
740 | | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
741 | | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
742 | --> oak --> maple
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
743 |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
744 | --- --- --- ---
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
745 --> | | |--> | | |--> nil
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
746 --- --- --- ---
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
747 | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
748 | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
749 --> pine --> needles
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
750 @end group
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
751 @end example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
752
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
753 The same list represented in the second box notation looks like this:
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
754
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
755 @example
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
756 @group
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
757 -------------- -------------- --------------
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
758 | car | cdr | | car | cdr | | car | cdr |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
759 | o | o------->| oak | o------->| maple | nil |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
760 | | | | | | | | | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
761 -- | --------- -------------- --------------
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
762 |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
763 |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
764 | -------------- ----------------
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
765 | | car | cdr | | car | cdr |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
766 ------>| pine | o------->| needles | nil |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
767 | | | | | |
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
768 -------------- ----------------
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
769 @end group
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
770 @end example
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 @node Dotted Pair Notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 @subsubsection Dotted Pair Notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 @cindex dotted pair notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 @cindex @samp{.} in lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
777 @dfn{Dotted pair notation} is a general syntax for cons cells that
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
778 represents the @sc{car} and @sc{cdr} explicitly. In this syntax,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 @code{(@var{a} .@: @var{b})} stands for a cons cell whose @sc{car} is
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
780 the object @var{a} and whose @sc{cdr} is the object @var{b}. Dotted
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
781 pair notation is more general than list syntax because the @sc{cdr}
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
782 does not have to be a list. However, it is more cumbersome in cases
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
783 where list syntax would work. In dotted pair notation, the list
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
784 @samp{(1 2 3)} is written as @samp{(1 . (2 . (3 . nil)))}. For
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
785 @code{nil}-terminated lists, you can use either notation, but list
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
786 notation is usually clearer and more convenient. When printing a
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
787 list, the dotted pair notation is only used if the @sc{cdr} of a cons
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
788 cell is not a list.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
790 Here's an example using boxes to illustrate dotted pair notation.
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
791 This example shows the pair @code{(rose . violet)}:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
795 --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
796 | | |--> violet
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
797 --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 --> rose
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
804 You can combine dotted pair notation with list notation to represent
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
805 conveniently a chain of cons cells with a non-@code{nil} final @sc{cdr}.
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
806 You write a dot after the last element of the list, followed by the
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
807 @sc{cdr} of the final cons cell. For example, @code{(rose violet
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
808 . buttercup)} is equivalent to @code{(rose . (violet . buttercup))}.
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
809 The object looks like this:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
813 --- --- --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
814 | | |--> | | |--> buttercup
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
815 --- --- --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 --> rose --> violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
822 The syntax @code{(rose .@: violet .@: buttercup)} is invalid because
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
823 there is nothing that it could mean. If anything, it would say to put
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
824 @code{buttercup} in the @sc{cdr} of a cons cell whose @sc{cdr} is already
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
825 used for @code{violet}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
827 The list @code{(rose violet)} is equivalent to @code{(rose . (violet))},
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 and looks like this:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
832 --- --- --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
833 | | |--> | | |--> nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
834 --- --- --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 --> rose --> violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 Similarly, the three-element list @code{(rose violet buttercup)}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 is equivalent to @code{(rose . (violet . (buttercup)))}.
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
843 @ifnottex
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 It looks like this:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 @group
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
848 --- --- --- --- --- ---
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
849 | | |--> | | |--> | | |--> nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
850 --- --- --- --- --- ---
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 --> rose --> violet --> buttercup
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 @end example
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
856 @end ifnottex
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 @node Association List Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @subsubsection Association List Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 An @dfn{association list} or @dfn{alist} is a specially-constructed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 list whose elements are cons cells. In each element, the @sc{car} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 considered a @dfn{key}, and the @sc{cdr} is considered an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 @dfn{associated value}. (In some cases, the associated value is stored
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 in the @sc{car} of the @sc{cdr}.) Association lists are often used as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 stacks, since it is easy to add or remove associations at the front of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 the list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 For example,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 (setq alist-of-colors
38940
848626a721b2 Remove two excess spaces.
Richard M. Stallman <rms@gnu.org>
parents: 38788
diff changeset
874 '((rose . red) (lily . white) (buttercup . yellow)))
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 sets the variable @code{alist-of-colors} to an alist of three elements. In the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 first element, @code{rose} is the key and @code{red} is the value.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 @xref{Association Lists}, for a further explanation of alists and for
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
882 functions that work on alists. @xref{Hash Tables}, for another kind of
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
883 lookup table, which is much faster for handling a large number of keys.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 @node Array Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 @subsection Array Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 An @dfn{array} is composed of an arbitrary number of slots for
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
889 holding or referring to other Lisp objects, arranged in a contiguous block of
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
890 memory. Accessing any element of an array takes approximately the same
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
891 amount of time. In contrast, accessing an element of a list requires
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
892 time proportional to the position of the element in the list. (Elements
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
893 at the end of a list take longer to access than elements at the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
894 beginning of a list.)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
895
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
896 Emacs defines four types of array: strings, vectors, bool-vectors, and
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
897 char-tables.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
898
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
899 A string is an array of characters and a vector is an array of
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
900 arbitrary objects. A bool-vector can hold only @code{t} or @code{nil}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
901 These kinds of array may have any length up to the largest integer.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
902 Char-tables are sparse arrays indexed by any valid character code; they
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
903 can hold arbitrary objects.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
905 The first element of an array has index zero, the second element has
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
906 index 1, and so on. This is called @dfn{zero-origin} indexing. For
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
907 example, an array of four elements has indices 0, 1, 2, @w{and 3}. The
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
908 largest possible index value is one less than the length of the array.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
909 Once an array is created, its length is fixed.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
911 All Emacs Lisp arrays are one-dimensional. (Most other programming
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
912 languages support multidimensional arrays, but they are not essential;
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
913 you can get the same effect with nested one-dimensional arrays.) Each
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
914 type of array has its own read syntax; see the following sections for
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
915 details.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
917 The array type is a subset of the sequence type, and contains the
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
918 string type, the vector type, the bool-vector type, and the char-table
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
919 type.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 @node String Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 @subsection String Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 A @dfn{string} is an array of characters. Strings are used for many
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 purposes in Emacs, as can be expected in a text editor; for example, as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 the names of Lisp symbols, as messages for the user, and to represent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 text extracted from buffers. Strings in Lisp are constants: evaluation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 of a string returns the same string.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
930 @xref{Strings and Characters}, for functions that operate on strings.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
931
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
932 @menu
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
933 * Syntax for Strings::
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
934 * Non-ASCII in Strings::
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
935 * Nonprinting Characters::
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
936 * Text Props and Strings::
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
937 @end menu
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
938
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
939 @node Syntax for Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
940 @subsubsection Syntax for Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
941
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 @cindex @samp{"} in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 @cindex double-quote in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 @cindex @samp{\} in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 @cindex backslash in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 The read syntax for strings is a double-quote, an arbitrary number of
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
947 characters, and another double-quote, @code{"like this"}. To include a
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
948 double-quote in a string, precede it with a backslash; thus, @code{"\""}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
949 is a string containing just a single double-quote character. Likewise,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
950 you can include a backslash by preceding it with another backslash, like
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
951 this: @code{"this \\ is a single embedded backslash"}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
953 @cindex newline in strings
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
954 The newline character is not special in the read syntax for strings;
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
955 if you write a new line between the double-quotes, it becomes a
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
956 character in the string. But an escaped newline---one that is preceded
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
957 by @samp{\}---does not become part of the string; i.e., the Lisp reader
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
958 ignores an escaped newline while reading a string. An escaped space
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
959 @w{@samp{\ }} is likewise ignored.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 "It is useful to include newlines
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 in documentation strings,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 but the newline is \
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ignored if escaped."
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
966 @result{} "It is useful to include newlines
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
967 in documentation strings,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 but the newline is ignored if escaped."
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
971 @node Non-ASCII in Strings
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
972 @subsubsection Non-@acronym{ASCII} Characters in Strings
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
973
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
974 You can include a non-@acronym{ASCII} international character in a string
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
975 constant by writing it literally. There are two text representations
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
976 for non-@acronym{ASCII} characters in Emacs strings (and in buffers): unibyte
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
977 and multibyte. If the string constant is read from a multibyte source,
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
978 such as a multibyte buffer or string, or a file that would be visited as
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
979 multibyte, then the character is read as a multibyte character, and that
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
980 makes the string multibyte. If the string constant is read from a
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
981 unibyte source, then the character is read as unibyte and that makes the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
982 string unibyte.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
983
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
984 You can also represent a multibyte non-@acronym{ASCII} character with its
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
985 character code: use a hex escape, @samp{\x@var{nnnnnnn}}, with as many
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
986 digits as necessary. (Multibyte non-@acronym{ASCII} character codes are all
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
987 greater than 256.) Any character which is not a valid hex digit
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
988 terminates this construct. If the next character in the string could be
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
989 interpreted as a hex digit, write @w{@samp{\ }} (backslash and space) to
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
990 terminate the hex escape---for example, @w{@samp{\x8e0\ }} represents
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
991 one character, @samp{a} with grave accent. @w{@samp{\ }} in a string
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
992 constant is just like backslash-newline; it does not contribute any
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
993 character to the string, but it does terminate the preceding hex escape.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
994
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
995 You can represent a unibyte non-@acronym{ASCII} character with its
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
996 character code, which must be in the range from 128 (0200 octal) to
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
997 255 (0377 octal). If you write all such character codes in octal and
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
998 the string contains no other characters forcing it to be multibyte,
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
999 this produces a unibyte string. However, using any hex escape in a
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1000 string (even for an @acronym{ASCII} character) forces the string to be
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1001 multibyte.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
1002
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1003 @xref{Text Representations}, for more information about the two
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1004 text representations.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1005
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1006 @node Nonprinting Characters
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1007 @subsubsection Nonprinting Characters in Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1008
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1009 You can use the same backslash escape-sequences in a string constant
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1010 as in character literals (but do not use the question mark that begins a
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1011 character constant). For example, you can write a string containing the
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1012 nonprinting characters tab and @kbd{C-a}, with commas and spaces between
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1013 them, like this: @code{"\t, \C-a"}. @xref{Character Type}, for a
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1014 description of the read syntax for characters.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1015
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1016 However, not all of the characters you can write with backslash
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1017 escape-sequences are valid in strings. The only control characters that
52978
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
1018 a string can hold are the @acronym{ASCII} control characters. Strings do not
1a5c50faf357 Replace @sc{foo} with @acronym{FOO}.
Eli Zaretskii <eliz@gnu.org>
parents: 52909
diff changeset
1019 distinguish case in @acronym{ASCII} control characters.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1020
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1021 Properly speaking, strings cannot hold meta characters; but when a
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1022 string is to be used as a key sequence, there is a special convention
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1023 that provides a way to represent meta versions of @acronym{ASCII}
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1024 characters in a string. If you use the @samp{\M-} syntax to indicate
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1025 a meta character in a string constant, this sets the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1026 @tex
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1027 @math{2^{7}}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1028 @end tex
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
1029 @ifnottex
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1030 2**7
27193
89afca54a135 @ifinto -> @ifnottex.
Gerd Moellmann <gerd@gnu.org>
parents: 27189
diff changeset
1031 @end ifnottex
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1032 bit of the character in the string. If the string is used in
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1033 @code{define-key} or @code{lookup-key}, this numeric code is translated
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1034 into the equivalent meta character. @xref{Character Type}.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1035
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1036 Strings cannot hold characters that have the hyper, super, or alt
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1037 modifiers.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1038
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1039 @node Text Props and Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1040 @subsubsection Text Properties in Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1041
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1042 A string can hold properties for the characters it contains, in
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1043 addition to the characters themselves. This enables programs that copy
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1044 text between strings and buffers to copy the text's properties with no
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1045 special effort. @xref{Text Properties}, for an explanation of what text
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1046 properties mean. Strings with text properties use a special read and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1047 print syntax:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 #("@var{characters}" @var{property-data}...)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 where @var{property-data} consists of zero or more elements, in groups
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 of three as follows:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 @var{beg} @var{end} @var{plist}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 The elements @var{beg} and @var{end} are integers, and together specify
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 a range of indices in the string; @var{plist} is the property list for
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1064 that range. For example,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1065
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1066 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1067 #("foo bar" 0 3 (face bold) 3 4 nil 4 7 (face italic))
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1068 @end example
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1070 @noindent
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1071 represents a string whose textual contents are @samp{foo bar}, in which
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1072 the first three characters have a @code{face} property with value
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1073 @code{bold}, and the last three have a @code{face} property with value
22267
dfac7398266b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
1074 @code{italic}. (The fourth character has no text properties, so its
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1075 property list is @code{nil}. It is not actually necessary to mention
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1076 ranges with @code{nil} as the property list, since any characters not
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1077 mentioned in any range will default to having no properties.)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 @node Vector Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 @subsection Vector Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 A @dfn{vector} is a one-dimensional array of elements of any type. It
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 takes a constant amount of time to access any element of a vector. (In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 a list, the access time of an element is proportional to the distance of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 the element from the beginning of the list.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 The printed representation of a vector consists of a left square
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 bracket, the elements, and a right square bracket. This is also the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 read syntax. Like numbers and strings, vectors are considered constants
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 for evaluation.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 [1 "two" (three)] ; @r{A vector of three elements.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 @result{} [1 "two" (three)]
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 @xref{Vectors}, for functions that work with vectors.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1099 @node Char-Table Type
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1100 @subsection Char-Table Type
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1101
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1102 A @dfn{char-table} is a one-dimensional array of elements of any type,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1103 indexed by character codes. Char-tables have certain extra features to
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1104 make them more useful for many jobs that involve assigning information
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1105 to character codes---for example, a char-table can have a parent to
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1106 inherit from, a default value, and a small number of extra slots to use for
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1107 special purposes. A char-table can also specify a single value for
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1108 a whole character set.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1109
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1110 The printed representation of a char-table is like a vector
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1111 except that there is an extra @samp{#^} at the beginning.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1112
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1113 @xref{Char-Tables}, for special functions to operate on char-tables.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1114 Uses of char-tables include:
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1115
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1116 @itemize @bullet
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1117 @item
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1118 Case tables (@pxref{Case Tables}).
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1119
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1120 @item
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1121 Character category tables (@pxref{Categories}).
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1122
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1123 @item
38788
0f05936702f1 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 37418
diff changeset
1124 Display tables (@pxref{Display Tables}).
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1125
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1126 @item
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1127 Syntax tables (@pxref{Syntax Tables}).
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1128 @end itemize
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1129
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1130 @node Bool-Vector Type
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1131 @subsection Bool-Vector Type
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1132
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1133 A @dfn{bool-vector} is a one-dimensional array of elements that
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1134 must be @code{t} or @code{nil}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1135
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1136 The printed representation of a bool-vector is like a string, except
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1137 that it begins with @samp{#&} followed by the length. The string
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1138 constant that follows actually specifies the contents of the bool-vector
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1139 as a bitmap---each ``character'' in the string contains 8 bits, which
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1140 specify the next 8 elements of the bool-vector (1 stands for @code{t},
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44089
diff changeset
1141 and 0 for @code{nil}). The least significant bits of the character
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1142 correspond to the lowest indices in the bool-vector.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1143
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1144 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1145 (make-bool-vector 3 t)
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1146 @result{} #&3"^G"
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1147 (make-bool-vector 3 nil)
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1148 @result{} #&3"^@@"
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1149 @end example
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1150
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1151 @noindent
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1152 These results make sense, because the binary code for @samp{C-g} is
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1153 111 and @samp{C-@@} is the character with code 0.
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1154
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1155 If the length is not a multiple of 8, the printed representation
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1156 shows extra elements, but these extras really make no difference. For
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1157 instance, in the next example, the two bool-vectors are equal, because
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1158 only the first 3 bits are used:
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1159
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1160 @example
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1161 (equal #&3"\377" #&3"\007")
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1162 @result{} t
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1163 @end example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1164
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1165 @node Hash Table Type
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1166 @subsection Hash Table Type
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1167
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1168 A hash table is a very fast kind of lookup table, somewhat like an
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1169 alist in that it maps keys to corresponding values, but much faster.
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
1170 Hash tables have no read syntax, and print using hash notation.
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
1171 @xref{Hash Tables}, for functions that operate on hash tables.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1172
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1173 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1174 (make-hash-table)
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1175 @result{} #<hash-table 'eql nil 0/65 0x83af980>
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1176 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1177
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1178 @node Function Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1179 @subsection Function Type
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 Just as functions in other programming languages are executable,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 @dfn{Lisp function} objects are pieces of executable code. However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 functions in Lisp are primarily Lisp objects, and only secondarily the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 text which represents them. These Lisp objects are lambda expressions:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 lists whose first element is the symbol @code{lambda} (@pxref{Lambda
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 Expressions}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 In most programming languages, it is impossible to have a function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 without a name. In Lisp, a function has no intrinsic name. A lambda
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 expression is also called an @dfn{anonymous function} (@pxref{Anonymous
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 Functions}). A named function in Lisp is actually a symbol with a valid
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 function in its function cell (@pxref{Defining Functions}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 Most of the time, functions are called when their names are written in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 Lisp expressions in Lisp programs. However, you can construct or obtain
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 a function object at run time and then call it with the primitive
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 functions @code{funcall} and @code{apply}. @xref{Calling Functions}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1199 @node Macro Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1200 @subsection Macro Type
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 language. It is represented as an object much like a function, but with
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1204 different argument-passing semantics. A Lisp macro has the form of a
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 list whose first element is the symbol @code{macro} and whose @sc{cdr}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 is a Lisp function object, including the @code{lambda} symbol.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 Lisp macro objects are usually defined with the built-in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 @code{defmacro} function, but any list that begins with @code{macro} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 a macro as far as Emacs is concerned. @xref{Macros}, for an explanation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 of how to write a macro.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1213 @strong{Warning}: Lisp macros and keyboard macros (@pxref{Keyboard
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1214 Macros}) are entirely different things. When we use the word ``macro''
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1215 without qualification, we mean a Lisp macro, not a keyboard macro.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1216
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 @node Primitive Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 @subsection Primitive Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 @cindex special forms
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 A @dfn{primitive function} is a function callable from Lisp but
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 written in the C programming language. Primitive functions are also
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 called @dfn{subrs} or @dfn{built-in functions}. (The word ``subr'' is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 derived from ``subroutine''.) Most primitive functions evaluate all
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 their arguments when they are called. A primitive function that does
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 not evaluate all its arguments is called a @dfn{special form}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 (@pxref{Special Forms}).@refill
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 It does not matter to the caller of a function whether the function is
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1230 primitive. However, this does matter if you try to redefine a primitive
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1231 with a function written in Lisp. The reason is that the primitive
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1232 function may be called directly from C code. Calls to the redefined
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1233 function from Lisp will use the new definition, but calls from C code
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1234 may still use the built-in definition. Therefore, @strong{we discourage
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1235 redefinition of primitive functions}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 The term @dfn{function} refers to all Emacs functions, whether written
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1238 in Lisp or C. @xref{Function Type}, for information about the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1239 functions written in Lisp.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 Primitive functions have no read syntax and print in hash notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 with the name of the subroutine.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 (symbol-function 'car) ; @r{Access the function cell}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 ; @r{of the symbol.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 @result{} #<subr car>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 (subrp (symbol-function 'car)) ; @r{Is this a primitive function?}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 @result{} t ; @r{Yes.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 @node Byte-Code Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 @subsection Byte-Code Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 The byte compiler produces @dfn{byte-code function objects}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 Internally, a byte-code function object is much like a vector; however,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 the evaluator handles this data type specially when it appears as a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 function to be called. @xref{Byte Compilation}, for information about
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 the byte compiler.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1263 The printed representation and read syntax for a byte-code function
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1264 object is like that for a vector, with an additional @samp{#} before the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1265 opening @samp{[}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 @node Autoload Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 @subsection Autoload Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 An @dfn{autoload object} is a list whose first element is the symbol
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1271 @code{autoload}. It is stored as the function definition of a symbol,
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1272 where it serves as a placeholder for the real definition. The autoload
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1273 object says that the real definition is found in a file of Lisp code
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1274 that should be loaded when necessary. It contains the name of the file,
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1275 plus some other information about the real definition.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 After the file has been loaded, the symbol should have a new function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 definition that is not an autoload object. The new definition is then
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 called as if it had been there to begin with. From the user's point of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 view, the function call works as expected, using the function definition
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 in the loaded file.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 An autoload object is usually created with the function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 @code{autoload}, which stores the object in the function cell of a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 symbol. @xref{Autoload}, for more details.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 @node Editing Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 @section Editing Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 @cindex editing types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1291 The types in the previous section are used for general programming
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1292 purposes, and most of them are common to most Lisp dialects. Emacs Lisp
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1293 provides several additional data types for purposes connected with
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1294 editing.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 * Buffer Type:: The basic object of editing.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 * Marker Type:: A position in a buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 * Window Type:: Buffers are displayed in windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 * Frame Type:: Windows subdivide frames.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 * Window Configuration Type:: Recording the way a frame is subdivided.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1302 * Frame Configuration Type:: Recording the status of all frames.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 * Process Type:: A process running on the underlying OS.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 * Stream Type:: Receive or send characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 * Keymap Type:: What function a keystroke invokes.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 * Overlay Type:: How an overlay is represented.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 @node Buffer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 @subsection Buffer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 A @dfn{buffer} is an object that holds text that can be edited
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 (@pxref{Buffers}). Most buffers hold the contents of a disk file
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 (@pxref{Files}) so they can be edited, but some are used for other
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 purposes. Most buffers are also meant to be seen by the user, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 therefore displayed, at some time, in a window (@pxref{Windows}). But a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 buffer need not be displayed in any window.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 The contents of a buffer are much like a string, but buffers are not
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 used like strings in Emacs Lisp, and the available operations are
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1321 different. For example, you can insert text efficiently into an
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1322 existing buffer, altering the buffer's contents, whereas ``inserting''
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1323 text into a string requires concatenating substrings, and the result is
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1324 an entirely new string object.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 Each buffer has a designated position called @dfn{point}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 (@pxref{Positions}). At any time, one buffer is the @dfn{current
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 buffer}. Most editing commands act on the contents of the current
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1329 buffer in the neighborhood of point. Many of the standard Emacs
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1330 functions manipulate or test the characters in the current buffer; a
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1331 whole chapter in this manual is devoted to describing these functions
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1332 (@pxref{Text}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 Several other data structures are associated with each buffer:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 @itemize @bullet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 @item
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 a local syntax table (@pxref{Syntax Tables});
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 @item
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 a local keymap (@pxref{Keymaps}); and,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 @item
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1344 a list of buffer-local variable bindings (@pxref{Buffer-Local Variables}).
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1345
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1346 @item
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1347 overlays (@pxref{Overlays}).
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1348
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1349 @item
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1350 text properties for the text in the buffer (@pxref{Text Properties}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 @end itemize
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 @noindent
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1354 The local keymap and variable list contain entries that individually
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 override global bindings or values. These are used to customize the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 behavior of programs in different buffers, without actually changing the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 programs.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1359 A buffer may be @dfn{indirect}, which means it shares the text
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1360 of another buffer, but presents it differently. @xref{Indirect Buffers}.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1361
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1362 Buffers have no read syntax. They print in hash notation, showing the
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 buffer name.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 (current-buffer)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 @result{} #<buffer objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 @node Marker Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 @subsection Marker Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 A @dfn{marker} denotes a position in a specific buffer. Markers
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 therefore have two components: one for the buffer, and one for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 position. Changes in the buffer's text automatically relocate the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 position value as necessary to ensure that the marker always points
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 between the same two characters in the buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 Markers have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 current character position and the name of the buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 (point-marker)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 @result{} #<marker at 10779 in objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 @xref{Markers}, for information on how to test, create, copy, and move
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 markers.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 @node Window Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 @subsection Window Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 A @dfn{window} describes the portion of the terminal screen that Emacs
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 uses to display a buffer. Every window has one associated buffer, whose
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 contents appear in the window. By contrast, a given buffer may appear
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 in one window, no window, or several windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 Though many windows may exist simultaneously, at any time one window
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 is designated the @dfn{selected window}. This is the window where the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 cursor is (usually) displayed when Emacs is ready for a command. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 selected window usually displays the current buffer, but this is not
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 necessarily the case.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 Windows are grouped on the screen into frames; each window belongs to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 one and only one frame. @xref{Frame Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 Windows have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 window number and the name of the buffer being displayed. The window
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 numbers exist to identify windows uniquely, since the buffer displayed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 in any given window can change frequently.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (selected-window)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 @result{} #<window 1 on objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 @xref{Windows}, for a description of the functions that work on windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 @node Frame Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 @subsection Frame Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1428 A @dfn{frame} is a rectangle on the screen that contains one or more
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 Emacs windows. A frame initially contains a single main window (plus
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 perhaps a minibuffer window) which you can subdivide vertically or
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 horizontally into smaller windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 Frames have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 frame's title, plus its address in core (useful to identify the frame
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 uniquely).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 (selected-frame)
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1440 @result{} #<frame emacs@@psilocin.gnu.org 0xdac80>
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 @xref{Frames}, for a description of the functions that work on frames.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 @node Window Configuration Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 @subsection Window Configuration Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 @cindex screen layout
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 A @dfn{window configuration} stores information about the positions,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 sizes, and contents of the windows in a frame, so you can recreate the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 same arrangement of windows later.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453
16736
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1454 Window configurations do not have a read syntax; their print syntax
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1455 looks like @samp{#<window-configuration>}. @xref{Window
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1456 Configurations}, for a description of several functions related to
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1457 window configurations.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1459 @node Frame Configuration Type
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1460 @subsection Frame Configuration Type
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1461 @cindex screen layout
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1462
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1463 A @dfn{frame configuration} stores information about the positions,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1464 sizes, and contents of the windows in all frames. It is actually
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1465 a list whose @sc{car} is @code{frame-configuration} and whose
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1466 @sc{cdr} is an alist. Each alist element describes one frame,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1467 which appears as the @sc{car} of that element.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1468
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1469 @xref{Frame Configurations}, for a description of several functions
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1470 related to frame configurations.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1471
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 @node Process Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 @subsection Process Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 The word @dfn{process} usually means a running program. Emacs itself
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 runs in a process of this sort. However, in Emacs Lisp, a process is a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 Lisp object that designates a subprocess created by the Emacs process.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 Programs such as shells, GDB, ftp, and compilers, running in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 subprocesses of Emacs, extend the capabilities of Emacs.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 An Emacs subprocess takes textual input from Emacs and returns textual
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 output to Emacs for further manipulation. Emacs can also send signals
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 to the subprocess.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 Process objects have no read syntax. They print in hash notation,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 giving the name of the process:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 (process-list)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 @result{} (#<process shell>)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 @xref{Processes}, for information about functions that create, delete,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 return information about, send input or signals to, and receive output
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 from processes.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 @node Stream Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 @subsection Stream Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 A @dfn{stream} is an object that can be used as a source or sink for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 characters---either to supply characters for input or to accept them as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 output. Many different types can be used this way: markers, buffers,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 strings, and functions. Most often, input streams (character sources)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 obtain characters from the keyboard, a buffer, or a file, and output
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 streams (character sinks) send characters to a buffer, such as a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 @file{*Help*} buffer, or to the echo area.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 The object @code{nil}, in addition to its other meanings, may be used
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 as a stream. It stands for the value of the variable
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 @code{standard-input} or @code{standard-output}. Also, the object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 @code{t} as a stream specifies input using the minibuffer
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 (@pxref{Minibuffers}) or output in the echo area (@pxref{The Echo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 Area}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 Streams have no special printed representation or read syntax, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 print as whatever primitive type they are.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
1520 @xref{Read and Print}, for a description of functions
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1521 related to streams, including parsing and printing functions.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 @node Keymap Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 @subsection Keymap Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 A @dfn{keymap} maps keys typed by the user to commands. This mapping
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 controls how the user's command input is executed. A keymap is actually
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 a list whose @sc{car} is the symbol @code{keymap}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 @xref{Keymaps}, for information about creating keymaps, handling prefix
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 keys, local as well as global keymaps, and changing key bindings.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 @node Overlay Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 @subsection Overlay Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1536 An @dfn{overlay} specifies properties that apply to a part of a
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1537 buffer. Each overlay applies to a specified range of the buffer, and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1538 contains a property list (a list whose elements are alternating property
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1539 names and values). Overlay properties are used to present parts of the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1540 buffer temporarily in a different display style. Overlays have no read
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1541 syntax, and print in hash notation, giving the buffer name and range of
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1542 positions.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1544 @xref{Overlays}, for how to create and use overlays.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1546 @node Circular Objects
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1547 @section Read Syntax for Circular Objects
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1548 @cindex circular structure, read syntax
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1549 @cindex shared structure, read syntax
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1550 @cindex @samp{#@var{n}=} read syntax
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1551 @cindex @samp{#@var{n}#} read syntax
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1552
60451
04426c0c07aa (Hash Table Type, Circular Objects): Get rid of "Emacs 21".
Richard M. Stallman <rms@gnu.org>
parents: 60044
diff changeset
1553 To represent shared or circular structures within a complex of Lisp
04426c0c07aa (Hash Table Type, Circular Objects): Get rid of "Emacs 21".
Richard M. Stallman <rms@gnu.org>
parents: 60044
diff changeset
1554 objects, you can use the reader constructs @samp{#@var{n}=} and
04426c0c07aa (Hash Table Type, Circular Objects): Get rid of "Emacs 21".
Richard M. Stallman <rms@gnu.org>
parents: 60044
diff changeset
1555 @samp{#@var{n}#}.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1556
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1557 Use @code{#@var{n}=} before an object to label it for later reference;
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1558 subsequently, you can use @code{#@var{n}#} to refer the same object in
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1559 another place. Here, @var{n} is some integer. For example, here is how
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1560 to make a list in which the first element recurs as the third element:
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1561
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1562 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1563 (#1=(a) b #1#)
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1564 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1565
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1566 @noindent
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1567 This differs from ordinary syntax such as this
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1568
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1569 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1570 ((a) b (a))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1571 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1572
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1573 @noindent
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1574 which would result in a list whose first and third elements
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1575 look alike but are not the same Lisp object. This shows the difference:
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1576
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1577 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1578 (prog1 nil
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1579 (setq x '(#1=(a) b #1#)))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1580 (eq (nth 0 x) (nth 2 x))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1581 @result{} t
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1582 (setq x '((a) b (a)))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1583 (eq (nth 0 x) (nth 2 x))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1584 @result{} nil
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1585 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1586
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1587 You can also use the same syntax to make a circular structure, which
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1588 appears as an ``element'' within itself. Here is an example:
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1589
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1590 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1591 #1=(a #1#)
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1592 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1593
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1594 @noindent
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1595 This makes a list whose second element is the list itself.
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1596 Here's how you can see that it really works:
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1597
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1598 @example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1599 (prog1 nil
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1600 (setq x '#1=(a #1#)))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1601 (eq x (cadr x))
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1602 @result{} t
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1603 @end example
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1604
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1605 The Lisp printer can produce this syntax to record circular and shared
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1606 structure in a Lisp object, if you bind the variable @code{print-circle}
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1607 to a non-@code{nil} value. @xref{Output Variables}.
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24951
diff changeset
1608
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 @node Type Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 @section Type Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 @cindex type checking
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 @kindex wrong-type-argument
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 The Emacs Lisp interpreter itself does not perform type checking on
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 the actual arguments passed to functions when they are called. It could
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 not do so, since function arguments in Lisp do not have declared data
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 types, as they do in other programming languages. It is therefore up to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 the individual function to test whether each actual argument belongs to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 a type that the function can use.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 All built-in functions do check the types of their actual arguments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 when appropriate, and signal a @code{wrong-type-argument} error if an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 argument is of the wrong type. For example, here is what happens if you
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1624 pass an argument to @code{+} that it cannot handle:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 (+ 2 'a)
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1629 @error{} Wrong type argument: number-or-marker-p, a
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 @cindex type predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 @cindex testing types
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1635 If you want your program to handle different types differently, you
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1636 must do explicit type checking. The most common way to check the type
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1637 of an object is to call a @dfn{type predicate} function. Emacs has a
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1638 type predicate for each type, as well as some predicates for
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1639 combinations of types.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1640
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1641 A type predicate function takes one argument; it returns @code{t} if
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1642 the argument belongs to the appropriate type, and @code{nil} otherwise.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1643 Following a general Lisp convention for predicate functions, most type
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1644 predicates' names end with @samp{p}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1645
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1646 Here is an example which uses the predicates @code{listp} to check for
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1647 a list and @code{symbolp} to check for a symbol.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1649 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1650 (defun add-on (x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1651 (cond ((symbolp x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1652 ;; If X is a symbol, put it on LIST.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1653 (setq list (cons x list)))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1654 ((listp x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1655 ;; If X is a list, add its elements to LIST.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1656 (setq list (append x list)))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1657 (t
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1658 ;; We handle only symbols and lists.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1659 (error "Invalid argument %s in add-on" x))))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1660 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1661
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1662 Here is a table of predefined type predicates, in alphabetical order,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 with references to further information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 @table @code
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 @item atom
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 @xref{List-related Predicates, atom}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 @item arrayp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 @xref{Array Functions, arrayp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1672 @item bool-vector-p
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1673 @xref{Bool-Vectors, bool-vector-p}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1674
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 @item bufferp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 @xref{Buffer Basics, bufferp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 @item byte-code-function-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 @xref{Byte-Code Type, byte-code-function-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 @item case-table-p
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1682 @xref{Case Tables, case-table-p}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 @item char-or-string-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 @xref{Predicates for Strings, char-or-string-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1687 @item char-table-p
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1688 @xref{Char-Tables, char-table-p}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1689
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 @item commandp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 @xref{Interactive Call, commandp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 @item consp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 @xref{List-related Predicates, consp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1696 @item display-table-p
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1697 @xref{Display Tables, display-table-p}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1698
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 @item floatp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 @xref{Predicates on Numbers, floatp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1702 @item frame-configuration-p
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1703 @xref{Frame Configurations, frame-configuration-p}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1704
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 @item frame-live-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 @xref{Deleting Frames, frame-live-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 @item framep
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 @xref{Frames, framep}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1711 @item functionp
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1712 @xref{Functions, functionp}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1713
60044
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
1714 @item hash-table-p
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
1715 @xref{Other Hash, hash-table-p}.
d1e94109daa4 (Printed Representation): Clarify read syntax vs print.
Richard M. Stallman <rms@gnu.org>
parents: 60008
diff changeset
1716
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 @item integer-or-marker-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 @xref{Predicates on Markers, integer-or-marker-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1720 @item integerp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721 @xref{Predicates on Numbers, integerp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1722
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1723 @item keymapp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1724 @xref{Creating Keymaps, keymapp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725
27528
5b4130fa5ab6 keywordp, user-variable-p change.
Dave Love <fx@gnu.org>
parents: 27374
diff changeset
1726 @item keywordp
5b4130fa5ab6 keywordp, user-variable-p change.
Dave Love <fx@gnu.org>
parents: 27374
diff changeset
1727 @xref{Constant Variables}.
5b4130fa5ab6 keywordp, user-variable-p change.
Dave Love <fx@gnu.org>
parents: 27374
diff changeset
1728
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729 @item listp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1730 @xref{List-related Predicates, listp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1731
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1732 @item markerp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733 @xref{Predicates on Markers, markerp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1735 @item wholenump
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1736 @xref{Predicates on Numbers, wholenump}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 @item nlistp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 @xref{List-related Predicates, nlistp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 @item numberp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1742 @xref{Predicates on Numbers, numberp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 @item number-or-marker-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745 @xref{Predicates on Markers, number-or-marker-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747 @item overlayp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1748 @xref{Overlays, overlayp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1750 @item processp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1751 @xref{Processes, processp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1753 @item sequencep
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1754 @xref{Sequence Functions, sequencep}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1755
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1756 @item stringp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1757 @xref{Predicates for Strings, stringp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1758
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 @item subrp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 @xref{Function Cells, subrp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1762 @item symbolp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1763 @xref{Symbols, symbolp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1764
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1765 @item syntax-table-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1766 @xref{Syntax Tables, syntax-table-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1767
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1768 @item user-variable-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 @xref{Defining Variables, user-variable-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 @item vectorp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 @xref{Vectors, vectorp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 @item window-configuration-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1775 @xref{Window Configurations, window-configuration-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1777 @item window-live-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778 @xref{Deleting Windows, window-live-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1779
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780 @item windowp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781 @xref{Basic Windows, windowp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1782 @end table
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1783
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1784 The most general way to check the type of an object is to call the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1785 function @code{type-of}. Recall that each object belongs to one and
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1786 only one primitive type; @code{type-of} tells you which one (@pxref{Lisp
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1787 Data Types}). But @code{type-of} knows nothing about non-primitive
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1788 types. In most cases, it is more convenient to use type predicates than
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1789 @code{type-of}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1790
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1791 @defun type-of object
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1792 This function returns a symbol naming the primitive type of
16736
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1793 @var{object}. The value is one of the symbols @code{symbol},
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1794 @code{integer}, @code{float}, @code{string}, @code{cons}, @code{vector},
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1795 @code{char-table}, @code{bool-vector}, @code{hash-table}, @code{subr},
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1796 @code{compiled-function}, @code{marker}, @code{overlay}, @code{window},
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1797 @code{buffer}, @code{frame}, @code{process}, or
16736
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1798 @code{window-configuration}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1799
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1800 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1801 (type-of 1)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1802 @result{} integer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1803 (type-of 'nil)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1804 @result{} symbol
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1805 (type-of '()) ; @r{@code{()} is @code{nil}.}
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1806 @result{} symbol
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1807 (type-of '(x))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1808 @result{} cons
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1809 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1810 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1811
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 @node Equality Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813 @section Equality Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 @cindex equality
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 Here we describe two functions that test for equality between any two
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 objects. Other functions test equality between objects of specific
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1818 types, e.g., strings. For these predicates, see the appropriate chapter
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1819 describing the data type.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 @defun eq object1 object2
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 This function returns @code{t} if @var{object1} and @var{object2} are
63763
121f7f14ce00 (Equality Predicates): Clarify meaning of equal.
Richard M. Stallman <rms@gnu.org>
parents: 60451
diff changeset
1823 the same object, @code{nil} otherwise.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 @code{eq} returns @code{t} if @var{object1} and @var{object2} are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 integers with the same value. Also, since symbol names are normally
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 unique, if the arguments are symbols with the same name, they are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 @code{eq}. For other types (e.g., lists, vectors, strings), two
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 arguments with the same contents or elements are not necessarily
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830 @code{eq} to each other: they are @code{eq} only if they are the same
63763
121f7f14ce00 (Equality Predicates): Clarify meaning of equal.
Richard M. Stallman <rms@gnu.org>
parents: 60451
diff changeset
1831 object, meaning that a change in the contents of one will be reflected
121f7f14ce00 (Equality Predicates): Clarify meaning of equal.
Richard M. Stallman <rms@gnu.org>
parents: 60451
diff changeset
1832 by the same change in the contents of the other.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836 (eq 'foo 'foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 (eq 456 456)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1846 (eq "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1847 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1848 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1849
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 (eq '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 (setq foo '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 @result{} (1 (2 (3)))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 (eq foo foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1859 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860 (eq foo '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1862 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1863
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 (eq [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 (eq (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1875 The @code{make-symbol} function returns an uninterned symbol, distinct
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1876 from the symbol that is used if you write the name in a Lisp expression.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1877 Distinct symbols with the same name are not @code{eq}. @xref{Creating
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
1878 Symbols}.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1879
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1880 @example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1881 @group
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1882 (eq (make-symbol "foo") 'foo)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1883 @result{} nil
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1884 @end group
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
1885 @end example
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886 @end defun
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1888 @defun equal object1 object2
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1889 This function returns @code{t} if @var{object1} and @var{object2} have
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1890 equal components, @code{nil} otherwise. Whereas @code{eq} tests if its
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1891 arguments are the same object, @code{equal} looks inside nonidentical
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1892 arguments to see if their elements or contents are the same. So, if two
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1893 objects are @code{eq}, they are @code{equal}, but the converse is not
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1894 always true.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 (equal 'foo 'foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1901
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1902 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1903 (equal 456 456)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1905 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908 (equal "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1909 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1911 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 (eq "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 (equal '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1919 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1921 (eq '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1922 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 (equal [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1929 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 (eq [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1931 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 (equal (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1936 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940 (eq (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1944
65539
e5d7d52e31dc (Printed Representation): Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 64889
diff changeset
1945 @cindex equality of strings
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 16736
diff changeset
1946 Comparison of strings is case-sensitive, but does not take account of
53217
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1947 text properties---it compares only the characters in the strings. For
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1948 technical reasons, a unibyte string and a multibyte string are
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1949 @code{equal} if and only if they contain the same sequence of
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1950 character codes and all these codes are either in the range 0 through
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1951 127 (@acronym{ASCII}) or 160 through 255 (@code{eight-bit-graphic}).
80af4875c661 (Non-ASCII in Strings): Clarify description of when a string is
Luc Teirlinck <teirllm@auburn.edu>
parents: 52978
diff changeset
1952 (@pxref{Text Representations}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1954 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1955 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1956 (equal "asdf" "ASDF")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1958 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959 @end example
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1960
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1961 However, two distinct buffers are never considered @code{equal}, even if
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1962 their textual contents are the same.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963 @end defun
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964
26188
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1965 The test for equality is implemented recursively; for example, given
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1966 two cons cells @var{x} and @var{y}, @code{(equal @var{x} @var{y})}
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1967 returns @code{t} if and only if both the expressions below return
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1968 @code{t}:
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1969
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1970 @example
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1971 (equal (car @var{x}) (car @var{y}))
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1972 (equal (cdr @var{x}) (cdr @var{y}))
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1973 @end example
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1974
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1975 Because of this recursive method, circular lists may therefore cause
d3cc464b9e87 Patch from rms.
Gerd Moellmann <gerd@gnu.org>
parents: 25751
diff changeset
1976 infinite recursion (leading to an error).
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52188
diff changeset
1977
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52188
diff changeset
1978 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52188
diff changeset
1979 arch-tag: 9711a66e-4749-4265-9e8c-972d55b67096
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52188
diff changeset
1980 @end ignore