Mercurial > emacs
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 |
rev | line source |
---|---|
6447 | 1 @c -*-texinfo-*- |
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 | 5 @c See the file elisp.texi for copying conditions. |
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 | 8 @chapter Lisp Data Types |
9 @cindex object | |
10 @cindex Lisp object | |
11 @cindex type | |
12 @cindex data type | |
13 | |
14 A Lisp @dfn{object} is a piece of data used and manipulated by Lisp | |
15 programs. For our purposes, a @dfn{type} or @dfn{data type} is a set of | |
16 possible objects. | |
17 | |
18 Every object belongs to at least one type. Objects of the same type | |
19 have similar structures and may usually be used in the same contexts. | |
20 Types can overlap, and objects can belong to two or more types. | |
21 Consequently, we can ask whether an object belongs to a particular type, | |
22 but not for ``the'' type of an object. | |
23 | |
24 @cindex primitive type | |
25 A few fundamental object types are built into Emacs. These, from | |
26188 | 26 which all other types are constructed, are called @dfn{primitive types}. |
27 Each object belongs to one and only one primitive type. These types | |
28 include @dfn{integer}, @dfn{float}, @dfn{cons}, @dfn{symbol}, | |
29 @dfn{string}, @dfn{vector}, @dfn{hash-table}, @dfn{subr}, and | |
30 @dfn{byte-code function}, plus several special types, such as | |
31 @dfn{buffer}, that are related to editing. (@xref{Editing Types}.) | |
6447 | 32 |
33 Each primitive type has a corresponding Lisp function that checks | |
34 whether an object is a member of that type. | |
35 | |
36 Note that Lisp is unlike many other languages in that Lisp objects are | |
37 @dfn{self-typing}: the primitive type of the object is implicit in the | |
38 object itself. For example, if an object is a vector, nothing can treat | |
39 it as a number; Lisp knows it is a vector, not a number. | |
40 | |
41 In most languages, the programmer must declare the data type of each | |
42 variable, and the type is known by the compiler but not represented in | |
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 | 48 |
49 This chapter describes the purpose, printed representation, and read | |
50 syntax of each of the standard types in GNU Emacs Lisp. Details on how | |
51 to use these types can be found in later chapters. | |
52 | |
53 @menu | |
54 * Printed Representation:: How Lisp objects are represented as text. | |
55 * Comments:: Comments and their formatting conventions. | |
56 * Programming Types:: Types found in all Lisp systems. | |
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 | 59 * Type Predicates:: Tests related to types. |
60 * Equality Predicates:: Tests of equality between any two objects. | |
61 @end menu | |
62 | |
63 @node Printed Representation | |
64 @comment node-name, next, previous, up | |
65 @section Printed Representation and Read Syntax | |
66 @cindex printed representation | |
67 @cindex read syntax | |
68 | |
69 The @dfn{printed representation} of an object is the format of the | |
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 | 95 |
96 In other languages, an expression is text; it has no other form. In | |
97 Lisp, an expression is primarily a Lisp object and only secondarily the | |
98 text that is the object's read syntax. Often there is no need to | |
99 emphasize this distinction, but you must keep it in the back of your | |
100 mind, or you will occasionally be very confused. | |
101 | |
102 When you evaluate an expression interactively, the Lisp interpreter | |
103 first reads the textual representation of it, producing a Lisp object, | |
104 and then evaluates that object (@pxref{Evaluation}). However, | |
105 evaluation and reading are separate activities. Reading returns the | |
106 Lisp object represented by the text that is read; the object may or may | |
107 not be evaluated later. @xref{Input Functions}, for a description of | |
108 @code{read}, the basic function for reading objects. | |
109 | |
110 @node Comments | |
111 @comment node-name, next, previous, up | |
112 @section Comments | |
113 @cindex comments | |
114 @cindex @samp{;} in comment | |
115 | |
116 A @dfn{comment} is text that is written in a program only for the sake | |
117 of humans that read the program, and that has no effect on the meaning | |
118 of the program. In Lisp, a semicolon (@samp{;}) starts a comment if it | |
119 is not within a string or character constant. The comment continues to | |
120 the end of line. The Lisp reader discards comments; they do not become | |
121 part of the Lisp objects which represent the program within the Lisp | |
122 system. | |
123 | |
12098 | 124 The @samp{#@@@var{count}} construct, which skips the next @var{count} |
125 characters, is useful for program-generated comments containing binary | |
126 data. The Emacs Lisp byte compiler uses this in its output files | |
127 (@pxref{Byte Compilation}). It isn't meant for source files, however. | |
128 | |
6447 | 129 @xref{Comment Tips}, for conventions for formatting comments. |
130 | |
131 @node Programming Types | |
132 @section Programming Types | |
133 @cindex programming types | |
134 | |
135 There are two general categories of types in Emacs Lisp: those having | |
136 to do with Lisp programming, and those having to do with editing. The | |
137 former exist in many Lisp implementations, in one form or another. The | |
138 latter are unique to Emacs Lisp. | |
139 | |
140 @menu | |
141 * Integer Type:: Numbers without fractional parts. | |
142 * Floating Point Type:: Numbers with fractional parts and with a large range. | |
143 * Character Type:: The representation of letters, numbers and | |
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 | 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 | 149 * Array Type:: Arrays include strings and vectors. |
150 * String Type:: An (efficient) array of characters. | |
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 | 157 expression, more fundamental but less pretty. |
158 * Primitive Function Type:: A function written in C, callable from Lisp. | |
159 * Byte-Code Type:: A function written in Lisp, then compiled. | |
160 * Autoload Type:: A type used for automatically loading seldom-used | |
161 functions. | |
162 @end menu | |
163 | |
164 @node Integer Type | |
165 @subsection Integer Type | |
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 | 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 | 171 @end ifnottex |
6447 | 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 | 174 @end tex |
175 to | |
27193 | 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 | 178 @end ifnottex |
6447 | 179 @tex |
25751
467b88fab665
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
24951
diff
changeset
|
180 @math{2^{28}-1}) |
6447 | 181 @end tex |
10559 | 182 on most machines. (Some machines may provide a wider range.) It is |
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 | 185 machines. |
6447 | 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 | 188 optional sign at the beginning and an optional period at the end. The |
189 printed representation produced by the Lisp interpreter never has a | |
190 leading @samp{+} or a final @samp{.}. | |
191 | |
192 @example | |
193 @group | |
194 -1 ; @r{The integer -1.} | |
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 | 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 | 199 @end group |
200 @end example | |
201 | |
202 @xref{Numbers}, for more information. | |
203 | |
204 @node Floating Point Type | |
205 @subsection Floating Point Type | |
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 | 213 |
214 The printed representation for floating point numbers requires either | |
215 a decimal point (with at least one digit following), an exponent, or | |
216 both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2}, | |
217 @samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point | |
218 number whose value is 1500. They are all equivalent. | |
219 | |
220 @xref{Numbers}, for more information. | |
221 | |
222 @node Character Type | |
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 | 225 |
226 A @dfn{character} in Emacs Lisp is nothing more than an integer. In | |
227 other words, characters are represented by their character codes. For | |
228 example, the character @kbd{A} is represented as the @w{integer 65}. | |
229 | |
230 Individual characters are not often used in programs. It is far more | |
231 common to work with @emph{strings}, which are sequences composed of | |
232 characters. @xref{String Type}. | |
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 | 241 |
242 @cindex read syntax for characters | |
243 @cindex printed representation for characters | |
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 | 247 Since characters are really integers, the printed representation of a |
248 character is a decimal number. This is also a possible read syntax for | |
249 a character, but writing characters that way in Lisp programs is a very | |
250 bad idea. You should @emph{always} use the special read syntax formats | |
251 that Emacs Lisp provides for characters. These syntax formats start | |
252 with a question mark. | |
253 | |
254 The usual read syntax for alphanumeric characters is a question mark | |
255 followed by the character; thus, @samp{?A} for the character | |
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 | 258 |
259 For example: | |
260 | |
261 @example | |
262 ?Q @result{} 81 ?q @result{} 113 | |
263 @end example | |
264 | |
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 | 270 |
271 @cindex whitespace | |
272 @cindex bell character | |
273 @cindex @samp{\a} | |
274 @cindex backspace | |
275 @cindex @samp{\b} | |
276 @cindex tab | |
277 @cindex @samp{\t} | |
278 @cindex vertical tab | |
279 @cindex @samp{\v} | |
280 @cindex formfeed | |
281 @cindex @samp{\f} | |
282 @cindex newline | |
283 @cindex @samp{\n} | |
284 @cindex return | |
285 @cindex @samp{\r} | |
286 @cindex escape | |
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 | 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 | 296 |
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 | 299 ?\b @result{} 8 ; @r{backspace, @key{BS}, @kbd{C-h}} |
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 | 302 ?\v @result{} 11 ; @r{vertical tab, @kbd{C-k}} |
303 ?\f @result{} 12 ; @r{formfeed character, @kbd{C-l}} | |
304 ?\r @result{} 13 ; @r{carriage return, @key{RET}, @kbd{C-m}} | |
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 | 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 | 309 @end example |
310 | |
311 @cindex escape sequence | |
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 | 317 |
318 @cindex control characters | |
319 Control characters may be represented using yet another read syntax. | |
320 This consists of a question mark followed by a backslash, caret, and the | |
321 corresponding non-control character, in either upper or lower case. For | |
322 example, both @samp{?\^I} and @samp{?\^i} are valid read syntax for the | |
323 character @kbd{C-i}, the character whose value is 9. | |
324 | |
325 Instead of the @samp{^}, you can use @samp{C-}; thus, @samp{?\C-i} is | |
326 equivalent to @samp{?\^I} and to @samp{?\^i}: | |
327 | |
328 @example | |
329 ?\^I @result{} 9 ?\C-I @result{} 9 | |
330 @end example | |
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 | 339 @ifnottex |
12098 | 340 2**26 |
27193 | 341 @end ifnottex |
12098 | 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 | 346 |
12098 | 347 For historical reasons, Emacs treats the @key{DEL} character as |
348 the control equivalent of @kbd{?}: | |
6447 | 349 |
350 @example | |
351 ?\^? @result{} 127 ?\C-? @result{} 127 | |
352 @end example | |
353 | |
12098 | 354 @noindent |
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 | 359 |
6447 | 360 For representing control characters to be found in files or strings, |
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 | 365 |
366 @cindex meta characters | |
367 A @dfn{meta character} is a character typed with the @key{META} | |
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 | 372 @ifnottex |
12098 | 373 2**27 |
27193 | 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 | 377 |
12098 | 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 | 382 @ifnottex |
12098 | 383 2**7 |
27193 | 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 | 390 |
391 The read syntax for meta characters uses @samp{\M-}. For example, | |
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 | 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 | 405 @ifnottex |
12098 | 406 2**25 |
27193 | 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 | 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 | 414 |
415 @cindex hyper characters | |
416 @cindex super characters | |
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 | 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 | 429 @ifnottex |
12098 | 430 Numerically, the |
431 bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper. | |
27193 | 432 @end ifnottex |
6447 | 433 |
434 @cindex @samp{\} in character constant | |
435 @cindex backslash in character constant | |
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 | 440 octal digits); thus, @samp{?\101} for the character @kbd{A}, |
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 | 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 | 445 |
446 @example | |
447 @group | |
448 ?\012 @result{} 10 ?\n @result{} 10 ?\C-j @result{} 10 | |
449 ?\101 @result{} 65 ?A @result{} 65 | |
450 @end group | |
451 @end example | |
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 | 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 | 461 @ifnottex |
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
16736
diff
changeset
|
462 @samp{a} with grave accent. |
27193 | 463 @end ifnottex |
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
16736
diff
changeset
|
464 |
6447 | 465 A backslash is allowed, and harmless, preceding any character without |
466 a special escape meaning; thus, @samp{?\+} is equivalent to @samp{?+}. | |
467 There is no reason to add a backslash before most characters. However, | |
468 you should add a backslash before any of the characters | |
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 | 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 | 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 | 493 A symbol whose name starts with a colon (@samp{:}) is called a |
494 @dfn{keyword symbol}. These symbols automatically act as constants, and | |
495 are normally used only by comparing an unknown symbol with a few | |
496 specific alternatives. | |
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 | 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 | 518 @b{Common Lisp note:} In Common Lisp, lower case letters are always |
12098 | 519 ``folded'' to upper case, unless they are explicitly escaped. In Emacs |
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 | 563 @node Sequence Type |
564 @subsection Sequence Types | |
565 | |
566 A @dfn{sequence} is a Lisp object that represents an ordered set of | |
567 elements. There are two kinds of sequence in Emacs Lisp, lists and | |
568 arrays. Thus, an object of type list or of type array is also | |
569 considered a sequence. | |
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 | 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 | 584 sequence. For example, the function @code{elt} can be used to extract |
585 an element of a sequence, given its index. @xref{Sequences Arrays | |
586 Vectors}. | |
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 | 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 | 596 @cindex address field of register |
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 | 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 | 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 | 649 original Lisp implementation ran on an @w{IBM 704} computer which |
650 divided words into two parts, called the ``address'' part and the | |
651 ``decrement''; @sc{car} was an instruction to extract the contents of | |
652 the address part of a register, and @sc{cdr} an instruction to extract | |
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 | 655 for its purpose, the construction of cells. |
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 | 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 | 665 @cindex box diagrams, for lists |
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 | 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 | 674 |
675 @example | |
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 | 680 | | | |
681 | | | | |
682 --> rose --> violet --> buttercup | |
683 @end group | |
684 @end example | |
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 | 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 | 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 | 699 buttercup)}, sketched in a different manner: |
700 | |
701 @smallexample | |
702 @group | |
703 --------------- ---------------- ------------------- | |
704 | car | cdr | | car | cdr | | car | cdr | | |
705 | rose | o-------->| violet | o-------->| buttercup | nil | | |
706 | | | | | | | | | | |
707 --------------- ---------------- ------------------- | |
708 @end group | |
709 @end smallexample | |
710 | |
711 @cindex @code{nil} in lists | |
712 @cindex empty list | |
713 A list with no elements in it is the @dfn{empty list}; it is identical | |
714 to the symbol @code{nil}. In other words, @code{nil} is both a symbol | |
715 and a list. | |
716 | |
717 Here is the list @code{(A ())}, or equivalently @code{(A nil)}, | |
718 depicted with boxes and arrows: | |
719 | |
720 @example | |
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 | 725 | | |
726 | | | |
727 --> A --> nil | |
728 @end group | |
729 @end example | |
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 | 771 |
772 @node Dotted Pair Notation | |
773 @subsubsection Dotted Pair Notation | |
774 @cindex dotted pair notation | |
775 @cindex @samp{.} in lists | |
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 | 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 | 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 | 792 |
793 @example | |
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 | 798 | |
799 | | |
800 --> rose | |
801 @end group | |
802 @end example | |
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 | 810 |
811 @example | |
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 | 816 | | |
817 | | | |
818 --> rose --> violet | |
819 @end group | |
820 @end example | |
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 | 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 | 828 and looks like this: |
829 | |
830 @example | |
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 | 835 | | |
836 | | | |
837 --> rose --> violet | |
838 @end group | |
839 @end example | |
840 | |
841 Similarly, the three-element list @code{(rose violet buttercup)} | |
842 is equivalent to @code{(rose . (violet . (buttercup)))}. | |
27193 | 843 @ifnottex |
6447 | 844 It looks like this: |
845 | |
846 @example | |
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 | 851 | | | |
852 | | | | |
853 --> rose --> violet --> buttercup | |
854 @end group | |
855 @end example | |
27193 | 856 @end ifnottex |
6447 | 857 |
858 @node Association List Type | |
859 @comment node-name, next, previous, up | |
860 @subsubsection Association List Type | |
861 | |
862 An @dfn{association list} or @dfn{alist} is a specially-constructed | |
863 list whose elements are cons cells. In each element, the @sc{car} is | |
864 considered a @dfn{key}, and the @sc{cdr} is considered an | |
865 @dfn{associated value}. (In some cases, the associated value is stored | |
866 in the @sc{car} of the @sc{cdr}.) Association lists are often used as | |
867 stacks, since it is easy to add or remove associations at the front of | |
868 the list. | |
869 | |
870 For example, | |
871 | |
872 @example | |
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 | 875 @end example |
876 | |
877 @noindent | |
878 sets the variable @code{alist-of-colors} to an alist of three elements. In the | |
879 first element, @code{rose} is the key and @code{red} is the value. | |
880 | |
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 | 884 |
885 @node Array Type | |
886 @subsection Array Type | |
887 | |
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 | 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 | 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 | 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 | 920 |
921 @node String Type | |
922 @subsection String Type | |
923 | |
924 A @dfn{string} is an array of characters. Strings are used for many | |
925 purposes in Emacs, as can be expected in a text editor; for example, as | |
926 the names of Lisp symbols, as messages for the user, and to represent | |
927 text extracted from buffers. Strings in Lisp are constants: evaluation | |
928 of a string returns the same string. | |
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 | 942 @cindex @samp{"} in strings |
943 @cindex double-quote in strings | |
944 @cindex @samp{\} in strings | |
945 @cindex backslash in strings | |
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 | 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 | 960 |
961 @example | |
962 "It is useful to include newlines | |
963 in documentation strings, | |
964 but the newline is \ | |
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 | 968 but the newline is ignored if escaped." |
969 @end example | |
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 | 1029 @ifnottex |
21007
66d807bdc5b4
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
16736
diff
changeset
|
1030 2**7 |
27193 | 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 | 1048 |
1049 @example | |
1050 #("@var{characters}" @var{property-data}...) | |
1051 @end example | |
1052 | |
1053 @noindent | |
1054 where @var{property-data} consists of zero or more elements, in groups | |
1055 of three as follows: | |
1056 | |
1057 @example | |
1058 @var{beg} @var{end} @var{plist} | |
1059 @end example | |
1060 | |
1061 @noindent | |
1062 The elements @var{beg} and @var{end} are integers, and together specify | |
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 | 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 | 1078 |
1079 @node Vector Type | |
1080 @subsection Vector Type | |
1081 | |
1082 A @dfn{vector} is a one-dimensional array of elements of any type. It | |
1083 takes a constant amount of time to access any element of a vector. (In | |
1084 a list, the access time of an element is proportional to the distance of | |
1085 the element from the beginning of the list.) | |
1086 | |
1087 The printed representation of a vector consists of a left square | |
1088 bracket, the elements, and a right square bracket. This is also the | |
1089 read syntax. Like numbers and strings, vectors are considered constants | |
1090 for evaluation. | |
1091 | |
1092 @example | |
1093 [1 "two" (three)] ; @r{A vector of three elements.} | |
1094 @result{} [1 "two" (three)] | |
1095 @end example | |
1096 | |
1097 @xref{Vectors}, for functions that work with vectors. | |
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 | 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 | 1180 |
1181 Just as functions in other programming languages are executable, | |
1182 @dfn{Lisp function} objects are pieces of executable code. However, | |
1183 functions in Lisp are primarily Lisp objects, and only secondarily the | |
1184 text which represents them. These Lisp objects are lambda expressions: | |
1185 lists whose first element is the symbol @code{lambda} (@pxref{Lambda | |
1186 Expressions}). | |
1187 | |
1188 In most programming languages, it is impossible to have a function | |
1189 without a name. In Lisp, a function has no intrinsic name. A lambda | |
1190 expression is also called an @dfn{anonymous function} (@pxref{Anonymous | |
1191 Functions}). A named function in Lisp is actually a symbol with a valid | |
1192 function in its function cell (@pxref{Defining Functions}). | |
1193 | |
1194 Most of the time, functions are called when their names are written in | |
1195 Lisp expressions in Lisp programs. However, you can construct or obtain | |
1196 a function object at run time and then call it with the primitive | |
1197 functions @code{funcall} and @code{apply}. @xref{Calling Functions}. | |
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 | 1201 |
1202 A @dfn{Lisp macro} is a user-defined construct that extends the Lisp | |
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 | 1205 list whose first element is the symbol @code{macro} and whose @sc{cdr} |
1206 is a Lisp function object, including the @code{lambda} symbol. | |
1207 | |
1208 Lisp macro objects are usually defined with the built-in | |
1209 @code{defmacro} function, but any list that begins with @code{macro} is | |
1210 a macro as far as Emacs is concerned. @xref{Macros}, for an explanation | |
1211 of how to write a macro. | |
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 | 1217 @node Primitive Function Type |
1218 @subsection Primitive Function Type | |
1219 @cindex special forms | |
1220 | |
1221 A @dfn{primitive function} is a function callable from Lisp but | |
1222 written in the C programming language. Primitive functions are also | |
1223 called @dfn{subrs} or @dfn{built-in functions}. (The word ``subr'' is | |
1224 derived from ``subroutine''.) Most primitive functions evaluate all | |
1225 their arguments when they are called. A primitive function that does | |
1226 not evaluate all its arguments is called a @dfn{special form} | |
1227 (@pxref{Special Forms}).@refill | |
1228 | |
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 | 1236 |
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 | 1240 |
1241 Primitive functions have no read syntax and print in hash notation | |
1242 with the name of the subroutine. | |
1243 | |
1244 @example | |
1245 @group | |
1246 (symbol-function 'car) ; @r{Access the function cell} | |
1247 ; @r{of the symbol.} | |
1248 @result{} #<subr car> | |
1249 (subrp (symbol-function 'car)) ; @r{Is this a primitive function?} | |
1250 @result{} t ; @r{Yes.} | |
1251 @end group | |
1252 @end example | |
1253 | |
1254 @node Byte-Code Type | |
1255 @subsection Byte-Code Function Type | |
1256 | |
1257 The byte compiler produces @dfn{byte-code function objects}. | |
1258 Internally, a byte-code function object is much like a vector; however, | |
1259 the evaluator handles this data type specially when it appears as a | |
1260 function to be called. @xref{Byte Compilation}, for information about | |
1261 the byte compiler. | |
1262 | |
12098 | 1263 The printed representation and read syntax for a byte-code function |
1264 object is like that for a vector, with an additional @samp{#} before the | |
1265 opening @samp{[}. | |
6447 | 1266 |
1267 @node Autoload Type | |
1268 @subsection Autoload Type | |
1269 | |
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 | 1276 |
1277 After the file has been loaded, the symbol should have a new function | |
1278 definition that is not an autoload object. The new definition is then | |
1279 called as if it had been there to begin with. From the user's point of | |
1280 view, the function call works as expected, using the function definition | |
1281 in the loaded file. | |
1282 | |
1283 An autoload object is usually created with the function | |
1284 @code{autoload}, which stores the object in the function cell of a | |
1285 symbol. @xref{Autoload}, for more details. | |
1286 | |
1287 @node Editing Types | |
1288 @section Editing Types | |
1289 @cindex editing types | |
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 | 1295 |
1296 @menu | |
1297 * Buffer Type:: The basic object of editing. | |
1298 * Marker Type:: A position in a buffer. | |
1299 * Window Type:: Buffers are displayed in windows. | |
1300 * Frame Type:: Windows subdivide frames. | |
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 | 1303 * Process Type:: A process running on the underlying OS. |
1304 * Stream Type:: Receive or send characters. | |
1305 * Keymap Type:: What function a keystroke invokes. | |
1306 * Overlay Type:: How an overlay is represented. | |
1307 @end menu | |
1308 | |
1309 @node Buffer Type | |
1310 @subsection Buffer Type | |
1311 | |
1312 A @dfn{buffer} is an object that holds text that can be edited | |
1313 (@pxref{Buffers}). Most buffers hold the contents of a disk file | |
1314 (@pxref{Files}) so they can be edited, but some are used for other | |
1315 purposes. Most buffers are also meant to be seen by the user, and | |
1316 therefore displayed, at some time, in a window (@pxref{Windows}). But a | |
1317 buffer need not be displayed in any window. | |
1318 | |
1319 The contents of a buffer are much like a string, but buffers are not | |
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 | 1325 |
1326 Each buffer has a designated position called @dfn{point} | |
1327 (@pxref{Positions}). At any time, one buffer is the @dfn{current | |
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 | 1333 |
1334 Several other data structures are associated with each buffer: | |
1335 | |
1336 @itemize @bullet | |
1337 @item | |
1338 a local syntax table (@pxref{Syntax Tables}); | |
1339 | |
1340 @item | |
1341 a local keymap (@pxref{Keymaps}); and, | |
1342 | |
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 | 1345 |
1346 @item | |
21682
90da2489c498
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
21007
diff
changeset
|
1347 overlays (@pxref{Overlays}). |
12098 | 1348 |
1349 @item | |
1350 text properties for the text in the buffer (@pxref{Text Properties}). | |
6447 | 1351 @end itemize |
1352 | |
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 | 1355 override global bindings or values. These are used to customize the |
1356 behavior of programs in different buffers, without actually changing the | |
1357 programs. | |
1358 | |
12098 | 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 | 1361 |
1362 Buffers have no read syntax. They print in hash notation, showing the | |
6447 | 1363 buffer name. |
1364 | |
1365 @example | |
1366 @group | |
1367 (current-buffer) | |
1368 @result{} #<buffer objects.texi> | |
1369 @end group | |
1370 @end example | |
1371 | |
1372 @node Marker Type | |
1373 @subsection Marker Type | |
1374 | |
1375 A @dfn{marker} denotes a position in a specific buffer. Markers | |
1376 therefore have two components: one for the buffer, and one for the | |
1377 position. Changes in the buffer's text automatically relocate the | |
1378 position value as necessary to ensure that the marker always points | |
1379 between the same two characters in the buffer. | |
1380 | |
1381 Markers have no read syntax. They print in hash notation, giving the | |
1382 current character position and the name of the buffer. | |
1383 | |
1384 @example | |
1385 @group | |
1386 (point-marker) | |
1387 @result{} #<marker at 10779 in objects.texi> | |
1388 @end group | |
1389 @end example | |
1390 | |
1391 @xref{Markers}, for information on how to test, create, copy, and move | |
1392 markers. | |
1393 | |
1394 @node Window Type | |
1395 @subsection Window Type | |
1396 | |
1397 A @dfn{window} describes the portion of the terminal screen that Emacs | |
1398 uses to display a buffer. Every window has one associated buffer, whose | |
1399 contents appear in the window. By contrast, a given buffer may appear | |
1400 in one window, no window, or several windows. | |
1401 | |
1402 Though many windows may exist simultaneously, at any time one window | |
1403 is designated the @dfn{selected window}. This is the window where the | |
1404 cursor is (usually) displayed when Emacs is ready for a command. The | |
1405 selected window usually displays the current buffer, but this is not | |
1406 necessarily the case. | |
1407 | |
1408 Windows are grouped on the screen into frames; each window belongs to | |
1409 one and only one frame. @xref{Frame Type}. | |
1410 | |
1411 Windows have no read syntax. They print in hash notation, giving the | |
1412 window number and the name of the buffer being displayed. The window | |
1413 numbers exist to identify windows uniquely, since the buffer displayed | |
1414 in any given window can change frequently. | |
1415 | |
1416 @example | |
1417 @group | |
1418 (selected-window) | |
1419 @result{} #<window 1 on objects.texi> | |
1420 @end group | |
1421 @end example | |
1422 | |
1423 @xref{Windows}, for a description of the functions that work on windows. | |
1424 | |
1425 @node Frame Type | |
1426 @subsection Frame Type | |
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 | 1429 Emacs windows. A frame initially contains a single main window (plus |
1430 perhaps a minibuffer window) which you can subdivide vertically or | |
1431 horizontally into smaller windows. | |
1432 | |
1433 Frames have no read syntax. They print in hash notation, giving the | |
1434 frame's title, plus its address in core (useful to identify the frame | |
1435 uniquely). | |
1436 | |
1437 @example | |
1438 @group | |
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 | 1441 @end group |
1442 @end example | |
1443 | |
1444 @xref{Frames}, for a description of the functions that work on frames. | |
1445 | |
1446 @node Window Configuration Type | |
1447 @subsection Window Configuration Type | |
1448 @cindex screen layout | |
1449 | |
1450 A @dfn{window configuration} stores information about the positions, | |
1451 sizes, and contents of the windows in a frame, so you can recreate the | |
1452 same arrangement of windows later. | |
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 | 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 | 1472 @node Process Type |
1473 @subsection Process Type | |
1474 | |
1475 The word @dfn{process} usually means a running program. Emacs itself | |
1476 runs in a process of this sort. However, in Emacs Lisp, a process is a | |
1477 Lisp object that designates a subprocess created by the Emacs process. | |
1478 Programs such as shells, GDB, ftp, and compilers, running in | |
1479 subprocesses of Emacs, extend the capabilities of Emacs. | |
1480 | |
1481 An Emacs subprocess takes textual input from Emacs and returns textual | |
1482 output to Emacs for further manipulation. Emacs can also send signals | |
1483 to the subprocess. | |
1484 | |
1485 Process objects have no read syntax. They print in hash notation, | |
1486 giving the name of the process: | |
1487 | |
1488 @example | |
1489 @group | |
1490 (process-list) | |
1491 @result{} (#<process shell>) | |
1492 @end group | |
1493 @end example | |
1494 | |
1495 @xref{Processes}, for information about functions that create, delete, | |
1496 return information about, send input or signals to, and receive output | |
1497 from processes. | |
1498 | |
1499 @node Stream Type | |
1500 @subsection Stream Type | |
1501 | |
1502 A @dfn{stream} is an object that can be used as a source or sink for | |
1503 characters---either to supply characters for input or to accept them as | |
1504 output. Many different types can be used this way: markers, buffers, | |
1505 strings, and functions. Most often, input streams (character sources) | |
1506 obtain characters from the keyboard, a buffer, or a file, and output | |
1507 streams (character sinks) send characters to a buffer, such as a | |
1508 @file{*Help*} buffer, or to the echo area. | |
1509 | |
1510 The object @code{nil}, in addition to its other meanings, may be used | |
1511 as a stream. It stands for the value of the variable | |
1512 @code{standard-input} or @code{standard-output}. Also, the object | |
1513 @code{t} as a stream specifies input using the minibuffer | |
1514 (@pxref{Minibuffers}) or output in the echo area (@pxref{The Echo | |
1515 Area}). | |
1516 | |
1517 Streams have no special printed representation or read syntax, and | |
1518 print as whatever primitive type they are. | |
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 | 1522 |
1523 @node Keymap Type | |
1524 @subsection Keymap Type | |
1525 | |
1526 A @dfn{keymap} maps keys typed by the user to commands. This mapping | |
1527 controls how the user's command input is executed. A keymap is actually | |
1528 a list whose @sc{car} is the symbol @code{keymap}. | |
1529 | |
1530 @xref{Keymaps}, for information about creating keymaps, handling prefix | |
1531 keys, local as well as global keymaps, and changing key bindings. | |
1532 | |
1533 @node Overlay Type | |
1534 @subsection Overlay Type | |
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 | 1543 |
12098 | 1544 @xref{Overlays}, for how to create and use overlays. |
6447 | 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 | 1609 @node Type Predicates |
1610 @section Type Predicates | |
1611 @cindex type checking | |
1612 @kindex wrong-type-argument | |
1613 | |
1614 The Emacs Lisp interpreter itself does not perform type checking on | |
1615 the actual arguments passed to functions when they are called. It could | |
1616 not do so, since function arguments in Lisp do not have declared data | |
1617 types, as they do in other programming languages. It is therefore up to | |
1618 the individual function to test whether each actual argument belongs to | |
1619 a type that the function can use. | |
1620 | |
1621 All built-in functions do check the types of their actual arguments | |
1622 when appropriate, and signal a @code{wrong-type-argument} error if an | |
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 | 1625 |
1626 @example | |
1627 @group | |
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 | 1630 @end group |
1631 @end example | |
1632 | |
1633 @cindex type predicates | |
1634 @cindex testing types | |
12067 | 1635 If you want your program to handle different types differently, you |
1636 must do explicit type checking. The most common way to check the type | |
1637 of an object is to call a @dfn{type predicate} function. Emacs has a | |
1638 type predicate for each type, as well as some predicates for | |
1639 combinations of types. | |
1640 | |
1641 A type predicate function takes one argument; it returns @code{t} if | |
1642 the argument belongs to the appropriate type, and @code{nil} otherwise. | |
1643 Following a general Lisp convention for predicate functions, most type | |
1644 predicates' names end with @samp{p}. | |
1645 | |
1646 Here is an example which uses the predicates @code{listp} to check for | |
1647 a list and @code{symbolp} to check for a symbol. | |
6447 | 1648 |
12067 | 1649 @example |
1650 (defun add-on (x) | |
1651 (cond ((symbolp x) | |
1652 ;; If X is a symbol, put it on LIST. | |
1653 (setq list (cons x list))) | |
1654 ((listp x) | |
1655 ;; If X is a list, add its elements to LIST. | |
1656 (setq list (append x list))) | |
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 | 1659 (error "Invalid argument %s in add-on" x)))) |
1660 @end example | |
1661 | |
1662 Here is a table of predefined type predicates, in alphabetical order, | |
6447 | 1663 with references to further information. |
1664 | |
1665 @table @code | |
1666 @item atom | |
1667 @xref{List-related Predicates, atom}. | |
1668 | |
1669 @item arrayp | |
1670 @xref{Array Functions, arrayp}. | |
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 | 1675 @item bufferp |
1676 @xref{Buffer Basics, bufferp}. | |
1677 | |
1678 @item byte-code-function-p | |
1679 @xref{Byte-Code Type, byte-code-function-p}. | |
1680 | |
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 | 1683 |
1684 @item char-or-string-p | |
1685 @xref{Predicates for Strings, char-or-string-p}. | |
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 | 1690 @item commandp |
1691 @xref{Interactive Call, commandp}. | |
1692 | |
1693 @item consp | |
1694 @xref{List-related Predicates, consp}. | |
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 | 1699 @item floatp |
1700 @xref{Predicates on Numbers, floatp}. | |
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 | 1705 @item frame-live-p |
1706 @xref{Deleting Frames, frame-live-p}. | |
1707 | |
1708 @item framep | |
1709 @xref{Frames, framep}. | |
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 | 1717 @item integer-or-marker-p |
1718 @xref{Predicates on Markers, integer-or-marker-p}. | |
1719 | |
1720 @item integerp | |
1721 @xref{Predicates on Numbers, integerp}. | |
1722 | |
1723 @item keymapp | |
1724 @xref{Creating Keymaps, keymapp}. | |
1725 | |
27528 | 1726 @item keywordp |
1727 @xref{Constant Variables}. | |
1728 | |
6447 | 1729 @item listp |
1730 @xref{List-related Predicates, listp}. | |
1731 | |
1732 @item markerp | |
1733 @xref{Predicates on Markers, markerp}. | |
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 | 1737 |
1738 @item nlistp | |
1739 @xref{List-related Predicates, nlistp}. | |
1740 | |
1741 @item numberp | |
1742 @xref{Predicates on Numbers, numberp}. | |
1743 | |
1744 @item number-or-marker-p | |
1745 @xref{Predicates on Markers, number-or-marker-p}. | |
1746 | |
1747 @item overlayp | |
1748 @xref{Overlays, overlayp}. | |
1749 | |
1750 @item processp | |
1751 @xref{Processes, processp}. | |
1752 | |
1753 @item sequencep | |
1754 @xref{Sequence Functions, sequencep}. | |
1755 | |
1756 @item stringp | |
1757 @xref{Predicates for Strings, stringp}. | |
1758 | |
1759 @item subrp | |
1760 @xref{Function Cells, subrp}. | |
1761 | |
1762 @item symbolp | |
1763 @xref{Symbols, symbolp}. | |
1764 | |
1765 @item syntax-table-p | |
1766 @xref{Syntax Tables, syntax-table-p}. | |
1767 | |
1768 @item user-variable-p | |
1769 @xref{Defining Variables, user-variable-p}. | |
1770 | |
1771 @item vectorp | |
1772 @xref{Vectors, vectorp}. | |
1773 | |
1774 @item window-configuration-p | |
1775 @xref{Window Configurations, window-configuration-p}. | |
1776 | |
1777 @item window-live-p | |
1778 @xref{Deleting Windows, window-live-p}. | |
1779 | |
1780 @item windowp | |
1781 @xref{Basic Windows, windowp}. | |
1782 @end table | |
1783 | |
12067 | 1784 The most general way to check the type of an object is to call the |
1785 function @code{type-of}. Recall that each object belongs to one and | |
1786 only one primitive type; @code{type-of} tells you which one (@pxref{Lisp | |
1787 Data Types}). But @code{type-of} knows nothing about non-primitive | |
1788 types. In most cases, it is more convenient to use type predicates than | |
1789 @code{type-of}. | |
1790 | |
1791 @defun type-of object | |
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 | 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 | 1799 |
1800 @example | |
1801 (type-of 1) | |
1802 @result{} integer | |
1803 (type-of 'nil) | |
1804 @result{} symbol | |
1805 (type-of '()) ; @r{@code{()} is @code{nil}.} | |
1806 @result{} symbol | |
1807 (type-of '(x)) | |
1808 @result{} cons | |
1809 @end example | |
1810 @end defun | |
1811 | |
6447 | 1812 @node Equality Predicates |
1813 @section Equality Predicates | |
1814 @cindex equality | |
1815 | |
1816 Here we describe two functions that test for equality between any two | |
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 | 1820 |
1821 @defun eq object1 object2 | |
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 | 1824 |
1825 @code{eq} returns @code{t} if @var{object1} and @var{object2} are | |
1826 integers with the same value. Also, since symbol names are normally | |
1827 unique, if the arguments are symbols with the same name, they are | |
1828 @code{eq}. For other types (e.g., lists, vectors, strings), two | |
1829 arguments with the same contents or elements are not necessarily | |
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 | 1833 |
1834 @example | |
1835 @group | |
1836 (eq 'foo 'foo) | |
1837 @result{} t | |
1838 @end group | |
1839 | |
1840 @group | |
1841 (eq 456 456) | |
1842 @result{} t | |
1843 @end group | |
1844 | |
1845 @group | |
1846 (eq "asdf" "asdf") | |
1847 @result{} nil | |
1848 @end group | |
1849 | |
1850 @group | |
1851 (eq '(1 (2 (3))) '(1 (2 (3)))) | |
1852 @result{} nil | |
1853 @end group | |
1854 | |
1855 @group | |
1856 (setq foo '(1 (2 (3)))) | |
1857 @result{} (1 (2 (3))) | |
1858 (eq foo foo) | |
1859 @result{} t | |
1860 (eq foo '(1 (2 (3)))) | |
1861 @result{} nil | |
1862 @end group | |
1863 | |
1864 @group | |
1865 (eq [(1 2) 3] [(1 2) 3]) | |
1866 @result{} nil | |
1867 @end group | |
1868 | |
1869 @group | |
1870 (eq (point-marker) (point-marker)) | |
1871 @result{} nil | |
1872 @end group | |
1873 @end example | |
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 | 1886 @end defun |
1887 | |
1888 @defun equal object1 object2 | |
1889 This function returns @code{t} if @var{object1} and @var{object2} have | |
1890 equal components, @code{nil} otherwise. Whereas @code{eq} tests if its | |
1891 arguments are the same object, @code{equal} looks inside nonidentical | |
26188 | 1892 arguments to see if their elements or contents are the same. So, if two |
1893 objects are @code{eq}, they are @code{equal}, but the converse is not | |
1894 always true. | |
6447 | 1895 |
1896 @example | |
1897 @group | |
1898 (equal 'foo 'foo) | |
1899 @result{} t | |
1900 @end group | |
1901 | |
1902 @group | |
1903 (equal 456 456) | |
1904 @result{} t | |
1905 @end group | |
1906 | |
1907 @group | |
1908 (equal "asdf" "asdf") | |
1909 @result{} t | |
1910 @end group | |
1911 @group | |
1912 (eq "asdf" "asdf") | |
1913 @result{} nil | |
1914 @end group | |
1915 | |
1916 @group | |
1917 (equal '(1 (2 (3))) '(1 (2 (3)))) | |
1918 @result{} t | |
1919 @end group | |
1920 @group | |
1921 (eq '(1 (2 (3))) '(1 (2 (3)))) | |
1922 @result{} nil | |
1923 @end group | |
1924 | |
1925 @group | |
1926 (equal [(1 2) 3] [(1 2) 3]) | |
1927 @result{} t | |
1928 @end group | |
1929 @group | |
1930 (eq [(1 2) 3] [(1 2) 3]) | |
1931 @result{} nil | |
1932 @end group | |
1933 | |
1934 @group | |
1935 (equal (point-marker) (point-marker)) | |
1936 @result{} t | |
1937 @end group | |
1938 | |
1939 @group | |
1940 (eq (point-marker) (point-marker)) | |
1941 @result{} nil | |
1942 @end group | |
1943 @end example | |
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 | 1953 |
1954 @example | |
1955 @group | |
1956 (equal "asdf" "ASDF") | |
1957 @result{} nil | |
1958 @end group | |
1959 @end example | |
12098 | 1960 |
26188 | 1961 However, two distinct buffers are never considered @code{equal}, even if |
1962 their textual contents are the same. | |
6447 | 1963 @end defun |
1964 | |
26188 | 1965 The test for equality is implemented recursively; for example, given |
1966 two cons cells @var{x} and @var{y}, @code{(equal @var{x} @var{y})} | |
1967 returns @code{t} if and only if both the expressions below return | |
1968 @code{t}: | |
1969 | |
1970 @example | |
1971 (equal (car @var{x}) (car @var{y})) | |
1972 (equal (cdr @var{x}) (cdr @var{y})) | |
1973 @end example | |
1974 | |
1975 Because of this recursive method, circular lists may therefore cause | |
1976 infinite recursion (leading to an error). | |
52401 | 1977 |
1978 @ignore | |
1979 arch-tag: 9711a66e-4749-4265-9e8c-972d55b67096 | |
1980 @end ignore |