annotate lispref/objects.texi @ 20279:69a6030e443a

(kill-region): Detect read-only text by getting an error trying to delete it. Handle the cases where we can, and can't, get the killed text from the undo list with much the same code.
author Karl Heuer <kwzh@gnu.org>
date Wed, 19 Nov 1997 21:36:56 +0000
parents 981e116b4ac6
children 66d807bdc5b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 @c See the file elisp.texi for copying conditions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @setfilename ../info/objects
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
6 @node Lisp Data Types, Numbers, Introduction, Top
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @chapter Lisp Data Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @cindex object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 @cindex Lisp object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 @cindex type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 @cindex data type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 A Lisp @dfn{object} is a piece of data used and manipulated by Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 programs. For our purposes, a @dfn{type} or @dfn{data type} is a set of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 possible objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 Every object belongs to at least one type. Objects of the same type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 have similar structures and may usually be used in the same contexts.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 Types can overlap, and objects can belong to two or more types.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 Consequently, we can ask whether an object belongs to a particular type,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 but not for ``the'' type of an object.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 @cindex primitive type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 A few fundamental object types are built into Emacs. These, from
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 which all other types are constructed, are called @dfn{primitive
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 types}. Each object belongs to one and only one primitive type. These
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 types include @dfn{integer}, @dfn{float}, @dfn{cons}, @dfn{symbol},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 @dfn{string}, @dfn{vector}, @dfn{subr}, @dfn{byte-code function}, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 several special types, such as @dfn{buffer}, that are related to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 editing. (@xref{Editing Types}.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 Each primitive type has a corresponding Lisp function that checks
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 whether an object is a member of that type.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 Note that Lisp is unlike many other languages in that Lisp objects are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 @dfn{self-typing}: the primitive type of the object is implicit in the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 object itself. For example, if an object is a vector, nothing can treat
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 it as a number; Lisp knows it is a vector, not a number.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 In most languages, the programmer must declare the data type of each
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 variable, and the type is known by the compiler but not represented in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 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
43 variable can have any type of value, and it remembers whatever value
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
44 you store in it, type and all.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 This chapter describes the purpose, printed representation, and read
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 syntax of each of the standard types in GNU Emacs Lisp. Details on how
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 to use these types can be found in later chapters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 * Printed Representation:: How Lisp objects are represented as text.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 * Comments:: Comments and their formatting conventions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 * Programming Types:: Types found in all Lisp systems.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 * Editing Types:: Types specific to Emacs.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 * Type Predicates:: Tests related to types.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 * Equality Predicates:: Tests of equality between any two objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 @node Printed Representation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 @section Printed Representation and Read Syntax
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 @cindex printed representation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 @cindex read syntax
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 The @dfn{printed representation} of an object is the format of the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 output generated by the Lisp printer (the function @code{prin1}) for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 that object. The @dfn{read syntax} of an object is the format of the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 input accepted by the Lisp reader (the function @code{read}) for that
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 object. Most objects have more than one possible read syntax. Some
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 types of object have no read syntax; except for these cases, the printed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 representation of an object is also a read syntax for it.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 In other languages, an expression is text; it has no other form. In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 Lisp, an expression is primarily a Lisp object and only secondarily the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 text that is the object's read syntax. Often there is no need to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 emphasize this distinction, but you must keep it in the back of your
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 mind, or you will occasionally be very confused.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 @cindex hash notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 Every type has a printed representation. Some types have no read
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 syntax, since it may not make sense to enter objects of these types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 directly in a Lisp program. For example, the buffer type does not have
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 a read syntax. Objects of these types are printed in @dfn{hash
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 notation}: the characters @samp{#<} followed by a descriptive string
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (typically the type name followed by the name of the object), and closed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 with a matching @samp{>}. Hash notation cannot be read at all, so the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 Lisp reader signals the error @code{invalid-read-syntax} whenever it
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 encounters @samp{#<}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 @kindex invalid-read-syntax
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (current-buffer)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 @result{} #<buffer objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 When you evaluate an expression interactively, the Lisp interpreter
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 first reads the textual representation of it, producing a Lisp object,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 and then evaluates that object (@pxref{Evaluation}). However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 evaluation and reading are separate activities. Reading returns the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 Lisp object represented by the text that is read; the object may or may
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 not be evaluated later. @xref{Input Functions}, for a description of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 @code{read}, the basic function for reading objects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 @node Comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 @section Comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 @cindex comments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 @cindex @samp{;} in comment
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 A @dfn{comment} is text that is written in a program only for the sake
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 of humans that read the program, and that has no effect on the meaning
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 of the program. In Lisp, a semicolon (@samp{;}) starts a comment if it
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 is not within a string or character constant. The comment continues to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 the end of line. The Lisp reader discards comments; they do not become
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 part of the Lisp objects which represent the program within the Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 system.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
118 The @samp{#@@@var{count}} construct, which skips the next @var{count}
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
119 characters, is useful for program-generated comments containing binary
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
120 data. The Emacs Lisp byte compiler uses this in its output files
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
121 (@pxref{Byte Compilation}). It isn't meant for source files, however.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
122
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 @xref{Comment Tips}, for conventions for formatting comments.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 @node Programming Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 @section Programming Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 @cindex programming types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 There are two general categories of types in Emacs Lisp: those having
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 to do with Lisp programming, and those having to do with editing. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 former exist in many Lisp implementations, in one form or another. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 latter are unique to Emacs Lisp.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 * Integer Type:: Numbers without fractional parts.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 * Floating Point Type:: Numbers with fractional parts and with a large range.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 * Character Type:: The representation of letters, numbers and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 control characters.
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
139 * 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
140 variable, or property list, and has a unique identity.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 * 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
142 * Cons Cell Type:: Cons cells, and lists (which are made from cons cells).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 * Array Type:: Arrays include strings and vectors.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 * String Type:: An (efficient) array of characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 * Vector Type:: One-dimensional arrays.
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
146 * 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
147 * Macro Type:: A method of expanding an expression into another
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 expression, more fundamental but less pretty.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 * Primitive Function Type:: A function written in C, callable from Lisp.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 * Byte-Code Type:: A function written in Lisp, then compiled.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 * Autoload Type:: A type used for automatically loading seldom-used
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 functions.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 @node Integer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 @subsection Integer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
158 The range of values for integers in Emacs Lisp is @minus{}134217728 to
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
159 134217727 (28 bits; i.e.,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 @ifinfo
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
161 -2**27
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 @end ifinfo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 @tex
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
164 $-2^{27}$
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 @end tex
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 @ifinfo
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
168 2**27 - 1)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 @end ifinfo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 @tex
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
171 $2^{28}-1$)
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 @end tex
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
173 on most machines. (Some machines may provide a wider range.) It is
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
174 important to note that the Emacs Lisp arithmetic functions do not check
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
175 for overflow. Thus @code{(1+ 134217727)} is @minus{}134217728 on most
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
176 machines.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
178 The read syntax for integers is a sequence of (base ten) digits with an
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 optional sign at the beginning and an optional period at the end. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 printed representation produced by the Lisp interpreter never has a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 leading @samp{+} or a final @samp{.}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 -1 ; @r{The integer -1.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 1 ; @r{The integer 1.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 1. ; @r{Also The integer 1.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 +1 ; @r{Also the integer 1.}
10559
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
189 268435457 ; @r{Also the integer 1!}
dcb43c6d4c42 Integer width changes.
Richard M. Stallman <rms@gnu.org>
parents: 7734
diff changeset
190 ; @r{ (on a 28-bit implementation)}
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 @xref{Numbers}, for more information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 @node Floating Point Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 @subsection Floating Point Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 Emacs version 19 supports floating point numbers (though there is a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 compilation option to disable them). The precise range of floating
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 point numbers is machine-specific.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 The printed representation for floating point numbers requires either
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 a decimal point (with at least one digit following), an exponent, or
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 @samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 number whose value is 1500. They are all equivalent.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 @xref{Numbers}, for more information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 @node Character Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 @subsection Character Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 @cindex @sc{ASCII} character codes
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 A @dfn{character} in Emacs Lisp is nothing more than an integer. In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 other words, characters are represented by their character codes. For
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 example, the character @kbd{A} is represented as the @w{integer 65}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 Individual characters are not often used in programs. It is far more
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 common to work with @emph{strings}, which are sequences composed of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 characters. @xref{String Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 Characters in strings, buffers, and files are currently limited to the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 range of 0 to 255---eight bits. If you store a larger integer into a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 string, buffer or file, it is truncated to that range. Characters that
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 represent keyboard input have a much wider range.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 @cindex read syntax for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 @cindex printed representation for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 @cindex syntax for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 Since characters are really integers, the printed representation of a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 character is a decimal number. This is also a possible read syntax for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 a character, but writing characters that way in Lisp programs is a very
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 bad idea. You should @emph{always} use the special read syntax formats
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 that Emacs Lisp provides for characters. These syntax formats start
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 with a question mark.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 The usual read syntax for alphanumeric characters is a question mark
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 followed by the character; thus, @samp{?A} for the character
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 @kbd{A}, @samp{?B} for the character @kbd{B}, and @samp{?a} for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 character @kbd{a}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 For example:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 ?Q @result{} 81 ?q @result{} 113
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 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
250 often a good idea to add a @samp{\} so that the Emacs commands for
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
251 editing Lisp code don't get confused. For example, @samp{?\ } is the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
252 way to write the space character. If the character is @samp{\}, you
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
253 @emph{must} use a second @samp{\} to quote it: @samp{?\\}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 @cindex whitespace
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 @cindex bell character
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 @cindex @samp{\a}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 @cindex backspace
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 @cindex @samp{\b}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 @cindex tab
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 @cindex @samp{\t}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 @cindex vertical tab
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 @cindex @samp{\v}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 @cindex formfeed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 @cindex @samp{\f}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 @cindex newline
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 @cindex @samp{\n}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 @cindex return
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 @cindex @samp{\r}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 @cindex escape
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 @cindex @samp{\e}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 You can express the characters Control-g, backspace, tab, newline,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 vertical tab, formfeed, return, and escape as @samp{?\a}, @samp{?\b},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 @samp{?\t}, @samp{?\n}, @samp{?\v}, @samp{?\f}, @samp{?\r}, @samp{?\e},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 respectively. Those values are 7, 8, 9, 10, 11, 12, 13, and 27 in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 decimal. Thus,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 ?\a @result{} 7 ; @r{@kbd{C-g}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ?\b @result{} 8 ; @r{backspace, @key{BS}, @kbd{C-h}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ?\t @result{} 9 ; @r{tab, @key{TAB}, @kbd{C-i}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 ?\n @result{} 10 ; @r{newline, @key{LFD}, @kbd{C-j}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 ?\v @result{} 11 ; @r{vertical tab, @kbd{C-k}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ?\f @result{} 12 ; @r{formfeed character, @kbd{C-l}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ?\r @result{} 13 ; @r{carriage return, @key{RET}, @kbd{C-m}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ?\e @result{} 27 ; @r{escape character, @key{ESC}, @kbd{C-[}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 ?\\ @result{} 92 ; @r{backslash character, @kbd{\}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 @cindex escape sequence
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 These sequences which start with backslash are also known as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 @dfn{escape sequences}, because backslash plays the role of an escape
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 character; this usage has nothing to do with the character @key{ESC}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 @cindex control characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 Control characters may be represented using yet another read syntax.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 This consists of a question mark followed by a backslash, caret, and the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 corresponding non-control character, in either upper or lower case. For
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 example, both @samp{?\^I} and @samp{?\^i} are valid read syntax for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 character @kbd{C-i}, the character whose value is 9.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 Instead of the @samp{^}, you can use @samp{C-}; thus, @samp{?\C-i} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 equivalent to @samp{?\^I} and to @samp{?\^i}:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ?\^I @result{} 9 ?\C-I @result{} 9
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 For use in strings and buffers, you are limited to the control
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 characters that exist in @sc{ASCII}, but for keyboard input purposes,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 you can turn any character into a control character with @samp{C-}. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 character codes for these non-@sc{ASCII} control characters include the
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
313 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
314 $2^{26}$
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
315 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
316 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
317 2**26
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
318 @end ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
319 bit as well as the code for the corresponding non-control
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 character. Ordinary terminals have no way of generating non-@sc{ASCII}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 control characters, but you can generate them straightforwardly using an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 X terminal.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
324 For historical reasons, Emacs treats the @key{DEL} character as
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
325 the control equivalent of @kbd{?}:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ?\^? @result{} 127 ?\C-? @result{} 127
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
331 @noindent
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
332 As a result, it is currently not possible to represent the character
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
333 @kbd{Control-?}, which is a meaningful input character under X. It is
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
334 not easy to change this as various Lisp files refer to @key{DEL} in this
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
335 way.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
336
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 For representing control characters to be found in files or strings,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 we recommend the @samp{^} syntax; for control characters in keyboard
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 input, we prefer the @samp{C-} syntax. This does not affect the meaning
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 of the program, but may guide the understanding of people who read it.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 @cindex meta characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 A @dfn{meta character} is a character typed with the @key{META}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 modifier key. The integer that represents such a character has the
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
345 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
346 $2^{27}$
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
347 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
348 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
349 2**27
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
350 @end ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
351 bit set (which on most machines makes it a negative number). We
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 use high bits for this and other modifiers to make possible a wide range
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 of basic character codes.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
355 In a string, the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
356 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
357 $2^{7}$
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
358 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
359 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
360 2**7
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
361 @end ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
362 bit indicates a meta character, so the meta
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 characters that can fit in a string have codes in the range from 128 to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 255, and are the meta versions of the ordinary @sc{ASCII} characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (In Emacs versions 18 and older, this convention was used for characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 outside of strings as well.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 The read syntax for meta characters uses @samp{\M-}. For example,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 @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
370 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
371 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
372 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
373 @samp{?\M-\C-b}, @samp{?\C-\M-b}, or @samp{?\M-\002}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 The case of an ordinary letter is indicated by its character code as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 part of @sc{ASCII}, but @sc{ASCII} has no way to represent whether a
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
377 control character is upper case or lower case. Emacs uses the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
378 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
379 $2^{25}$
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
380 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
381 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
382 2**25
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
383 @end ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
384 bit to indicate that the shift key was used for typing a control
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
385 character. This distinction is possible only when you use X terminals
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
386 or other special terminals; ordinary terminals do not indicate the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
387 distinction to the computer in any way.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 @cindex hyper characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 @cindex super characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 @cindex alt characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 The X Window System defines three other modifier bits that can be set
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 in a character: @dfn{hyper}, @dfn{super} and @dfn{alt}. The syntaxes
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 for these bits are @samp{\H-}, @samp{\s-} and @samp{\A-}. Thus,
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
395 @samp{?\H-\M-\A-x} represents @kbd{Alt-Hyper-Meta-x}.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
396 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
397 Numerically, the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
398 bit values are $2^{22}$ for alt, $2^{23}$ for super and $2^{24}$ for hyper.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
399 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
400 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
401 Numerically, the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
402 bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
403 @end ifinfo
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 @cindex @samp{?} in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 @cindex question mark in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 @cindex @samp{\} in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 @cindex backslash in character constant
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 @cindex octal character code
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 Finally, the most general read syntax consists of a question mark
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 followed by a backslash and the character code in octal (up to three
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 octal digits); thus, @samp{?\101} for the character @kbd{A},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 @samp{?\001} for the character @kbd{C-a}, and @code{?\002} for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 character @kbd{C-b}. Although this syntax can represent any @sc{ASCII}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 character, it is preferred only when the precise octal value is more
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 important than the @sc{ASCII} representation.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ?\012 @result{} 10 ?\n @result{} 10 ?\C-j @result{} 10
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 ?\101 @result{} 65 ?A @result{} 65
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 A backslash is allowed, and harmless, preceding any character without
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 a special escape meaning; thus, @samp{?\+} is equivalent to @samp{?+}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 There is no reason to add a backslash before most characters. However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 you should add a backslash before any of the characters
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 @samp{()\|;'`"#.,} to avoid confusing the Emacs commands for editing
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 Lisp code. Also add a backslash before whitespace characters such as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 space, tab, newline and formfeed. However, it is cleaner to use one of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 the easily readable escape sequences, such as @samp{\t}, instead of an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 actual whitespace character such as a tab.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
435 @node Symbol Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
436 @subsection Symbol Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
437
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
438 A @dfn{symbol} in GNU Emacs Lisp is an object with a name. The symbol
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
439 name serves as the printed representation of the symbol. In ordinary
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
440 use, the name is unique---no two symbols have the same name.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
441
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
442 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
443 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
444 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
445 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
446 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
447 independently.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
448
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
449 @cindex @samp{\} in symbols
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
450 @cindex backslash in symbols
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
451 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
452 are written with letters, digits, and the punctuation characters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
453 @samp{-+=*/}. Such names require no special punctuation; the characters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
454 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
455 (If it does, write a @samp{\} at the beginning of the name to force
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
456 interpretation as a symbol.) The characters @samp{_~!@@$%^&:<>@{@}} are
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
457 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
458 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
459 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
460 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
461 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
462 character; in the name of a symbol, however, @samp{\t} merely quotes the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
463 letter @kbd{t}. To have a symbol with a tab character in its name, you
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
464 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
465 do such a thing.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
466
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
467 @cindex CL note---case of letters
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
468 @quotation
7734
2d4db32cccd5 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7337
diff changeset
469 @b{Common Lisp note:} In Common Lisp, lower case letters are always
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
470 ``folded'' to upper case, unless they are explicitly escaped. In Emacs
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
471 Lisp, upper case and lower case letters are distinct.
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
472 @end quotation
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
473
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
474 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
475 the fifth example is escaped to prevent it from being read as a number.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
476 This is not necessary in the sixth example because the rest of the name
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
477 makes it invalid as a number.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
478
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
479 @example
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
480 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
481 foo ; @r{A symbol named @samp{foo}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
482 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
483 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
484 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
485 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
486 1+ ; @r{A symbol named @samp{1+}}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
487 ; @r{(not @samp{+1}, which is an integer).}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
488 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
489 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
490 \+1 ; @r{A symbol named @samp{+1}}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
491 ; @r{(not a very readable name).}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
492 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
493 @group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
494 \(*\ 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
495 @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
496 @c apparent misalignment of the comment.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
497 +-*/_~!@@$%^&=:<>@{@} ; @r{A symbol named @samp{+-*/_~!@@$%^&=:<>@{@}}.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
498 ; @r{These characters need not be escaped.}
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
499 @end group
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
500 @end example
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
501
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 @node Sequence Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 @subsection Sequence Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 A @dfn{sequence} is a Lisp object that represents an ordered set of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 elements. There are two kinds of sequence in Emacs Lisp, lists and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 arrays. Thus, an object of type list or of type array is also
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 considered a sequence.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 Arrays are further subdivided into strings and vectors. Vectors can
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 hold elements of any type, but string elements must be characters in the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 range from 0 to 255. However, the characters in a string can have text
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
513 properties like characters in a buffer (@pxref{Text Properties});
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
514 vectors do not support text properties even when their elements happen
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
515 to be characters.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 Lists, strings and vectors are different, but they have important
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 similarities. For example, all have a length @var{l}, and all have
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 elements which can be indexed from zero to @var{l} minus one. Also,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 several functions, called sequence functions, accept any kind of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 sequence. For example, the function @code{elt} can be used to extract
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 an element of a sequence, given its index. @xref{Sequences Arrays
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 Vectors}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 It is impossible to read the same sequence twice, since sequences are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 always created anew upon reading. If you read the read syntax for a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 sequence twice, you get two sequences with equal contents. There is one
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 exception: the empty list @code{()} always stands for the same object,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 @code{nil}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
531 @node Cons Cell Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
532 @subsection Cons Cell and List Types
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 @cindex address field of register
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 @cindex decrement field of register
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
536 A @dfn{cons cell} is an object comprising two pointers named the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
537 @sc{car} and the @sc{cdr}. Each of them can point to any Lisp object.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
538
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
539 A @dfn{list} is a series of cons cells, linked together so that the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
540 @sc{cdr} of each cons cell points either to another cons cell or to the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
541 empty list. @xref{Lists}, for functions that work on lists. Because
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
542 most cons cells are used as part of lists, the phrase @dfn{list
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
543 structure} has come to refer to any structure made out of cons cells.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 The names @sc{car} and @sc{cdr} have only historical meaning now. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 original Lisp implementation ran on an @w{IBM 704} computer which
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 divided words into two parts, called the ``address'' part and the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 ``decrement''; @sc{car} was an instruction to extract the contents of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 the address part of a register, and @sc{cdr} an instruction to extract
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 the contents of the decrement. By contrast, ``cons cells'' are named
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 for the function @code{cons} that creates them, which in turn is named
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 for its purpose, the construction of cells.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 @cindex atom
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 Because cons cells are so central to Lisp, we also have a word for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 ``an object which is not a cons cell''. These objects are called
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 @dfn{atoms}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 @cindex parenthesis
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 The read syntax and printed representation for lists are identical, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 consist of a left parenthesis, an arbitrary number of elements, and a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 right parenthesis.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 Upon reading, each object inside the parentheses becomes an element
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 of the list. That is, a cons cell is made for each element. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 @sc{car} of the cons cell points to the element, and its @sc{cdr} points
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
567 to the next cons cell of the list, which holds the next element in the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
568 list. The @sc{cdr} of the last cons cell is set to point to @code{nil}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 @cindex box diagrams, for lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 @cindex diagrams, boxed, for lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 A list can be illustrated by a diagram in which the cons cells are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 shown as pairs of boxes. (The Lisp reader cannot read such an
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
574 illustration; unlike the textual notation, which can be understood by
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
575 both humans and computers, the box illustrations can be understood only
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
576 by humans.) The following represents the three-element list @code{(rose
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 violet buttercup)}:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 ___ ___ ___ ___ ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 |___|___|--> |___|___|--> |___|___|--> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 --> rose --> violet --> buttercup
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 In this diagram, each box represents a slot that can refer to any Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 object. Each pair of boxes represents a cons cell. Each arrow is a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 reference to a Lisp object, either an atom or another cons cell.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 In this example, the first box, the @sc{car} of the first cons cell,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 refers to or ``contains'' @code{rose} (a symbol). The second box, the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 @sc{cdr} of the first cons cell, refers to the next pair of boxes, the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 second cons cell. The @sc{car} of the second cons cell refers to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 @code{violet} and the @sc{cdr} refers to the third cons cell. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 @sc{cdr} of the third (and last) cons cell refers to @code{nil}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 Here is another diagram of the same list, @code{(rose violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 buttercup)}, sketched in a different manner:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 @smallexample
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 --------------- ---------------- -------------------
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 | car | cdr | | car | cdr | | car | cdr |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 | rose | o-------->| violet | o-------->| buttercup | nil |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 | | | | | | | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 --------------- ---------------- -------------------
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 @end smallexample
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 @cindex @samp{(@dots{})} in lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 @cindex @code{nil} in lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 @cindex empty list
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 A list with no elements in it is the @dfn{empty list}; it is identical
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 to the symbol @code{nil}. In other words, @code{nil} is both a symbol
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 and a list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 Here are examples of lists written in Lisp syntax:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 (A 2 "A") ; @r{A list of three elements.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 () ; @r{A list of no elements (the empty list).}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 nil ; @r{A list of no elements (the empty list).}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 ("A ()") ; @r{A list of one element: the string @code{"A ()"}.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 (A ()) ; @r{A list of two elements: @code{A} and the empty list.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (A nil) ; @r{Equivalent to the previous.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 ((A B C)) ; @r{A list of one element}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 ; @r{(which is a list of three elements).}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 Here is the list @code{(A ())}, or equivalently @code{(A nil)},
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 depicted with boxes and arrows:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 ___ ___ ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 |___|___|--> |___|___|--> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 --> A --> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 * Dotted Pair Notation:: An alternative syntax for lists.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 * Association List Type:: A specially constructed list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 @node Dotted Pair Notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 @subsubsection Dotted Pair Notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 @cindex dotted pair notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 @cindex @samp{.} in lists
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 @dfn{Dotted pair notation} is an alternative syntax for cons cells
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 that represents the @sc{car} and @sc{cdr} explicitly. In this syntax,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 @code{(@var{a} .@: @var{b})} stands for a cons cell whose @sc{car} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 the object @var{a}, and whose @sc{cdr} is the object @var{b}. Dotted
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 pair notation is therefore more general than list syntax. In the dotted
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 pair notation, the list @samp{(1 2 3)} is written as @samp{(1 . (2 . (3
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 . nil)))}. For @code{nil}-terminated lists, the two notations produce
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 the same result, but list notation is usually clearer and more
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 convenient when it is applicable. When printing a list, the dotted pair
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 notation is only used if the @sc{cdr} of a cell is not a list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 Here's how box notation can illustrate dotted pairs. This example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 shows the pair @code{(rose . violet)}:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 |___|___|--> violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 --> rose
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 Dotted pair notation can be combined with list notation to represent a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 chain of cons cells with a non-@code{nil} final @sc{cdr}. For example,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 @code{(rose violet . buttercup)} is equivalent to @code{(rose . (violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 . buttercup))}. The object looks like this:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 ___ ___ ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 |___|___|--> |___|___|--> buttercup
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 --> rose --> violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 These diagrams make it evident why @w{@code{(rose .@: violet .@:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 buttercup)}} is invalid syntax; it would require a cons cell that has
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 three parts rather than two.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 The list @code{(rose violet)} is equivalent to @code{(rose . (violet))}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 and looks like this:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 ___ ___ ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 |___|___|--> |___|___|--> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 --> rose --> violet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 Similarly, the three-element list @code{(rose violet buttercup)}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 is equivalent to @code{(rose . (violet . (buttercup)))}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 @ifinfo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 It looks like this:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 ___ ___ ___ ___ ___ ___
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 |___|___|--> |___|___|--> |___|___|--> nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 | | |
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 --> rose --> violet --> buttercup
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 @end ifinfo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 @node Association List Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 @comment node-name, next, previous, up
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 @subsubsection Association List Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 An @dfn{association list} or @dfn{alist} is a specially-constructed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 list whose elements are cons cells. In each element, the @sc{car} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 considered a @dfn{key}, and the @sc{cdr} is considered an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 @dfn{associated value}. (In some cases, the associated value is stored
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 in the @sc{car} of the @sc{cdr}.) Association lists are often used as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 stacks, since it is easy to add or remove associations at the front of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 the list.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 For example,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (setq alist-of-colors
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 '((rose . red) (lily . white) (buttercup . yellow)))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 sets the variable @code{alist-of-colors} to an alist of three elements. In the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 first element, @code{rose} is the key and @code{red} is the value.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 @xref{Association Lists}, for a further explanation of alists and for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 functions that work on alists.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 @node Array Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 @subsection Array Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 An @dfn{array} is composed of an arbitrary number of slots for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 referring to other Lisp objects, arranged in a contiguous block of
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
760 memory. Accessing any element of an array takes the same amount of
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 time. In contrast, accessing an element of a list requires time
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 proportional to the position of the element in the list. (Elements at
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 the end of a list take longer to access than elements at the beginning
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 of a list.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 Emacs defines two types of array, strings and vectors. A string is an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 array of characters and a vector is an array of arbitrary objects. Both
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 are one-dimensional. (Most other programming languages support
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 multidimensional arrays, but they are not essential; you can get the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 same effect with an array of arrays.) Each type of array has its own
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 read syntax; see @ref{String Type}, and @ref{Vector Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 An array may have any length up to the largest integer; but once
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 created, it has a fixed size. The first element of an array has index
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 zero, the second element has index 1, and so on. This is called
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 @dfn{zero-origin} indexing. For example, an array of four elements has
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 indices 0, 1, 2, @w{and 3}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 The array type is contained in the sequence type and contains both the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 string type and the vector type.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 @node String Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 @subsection String Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 A @dfn{string} is an array of characters. Strings are used for many
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 purposes in Emacs, as can be expected in a text editor; for example, as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 the names of Lisp symbols, as messages for the user, and to represent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 text extracted from buffers. Strings in Lisp are constants: evaluation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 of a string returns the same string.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 @cindex @samp{"} in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 @cindex double-quote in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 @cindex @samp{\} in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 @cindex backslash in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 The read syntax for strings is a double-quote, an arbitrary number of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 characters, and another double-quote, @code{"like this"}. The Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 reader accepts the same formats for reading the characters of a string
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 as it does for reading single characters (without the question mark that
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 begins a character literal). You can enter a nonprinting character such
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 as tab, @kbd{C-a} or @kbd{M-C-A} using the convenient escape sequences,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 like this: @code{"\t, \C-a, \M-\C-a"}. You can include a double-quote
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 in a string by preceding it with a backslash; thus, @code{"\""} is a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 string containing just a single double-quote character.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (@xref{Character Type}, for a description of the read syntax for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 characters.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 If you use the @samp{\M-} syntax to indicate a meta character in a
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
808 string constant, this sets the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
809 @iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
810 $2^{7}$
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
811 @end iftex
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
812 @ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
813 2**7
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
814 @end ifinfo
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
815 bit of the character in the string.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 This is not the same representation that the meta modifier has in a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 character on its own (not inside a string). @xref{Character Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
819 Strings cannot hold characters that have the hyper, super, or alt
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 modifiers; they can hold @sc{ASCII} control characters, but no others.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 They do not distinguish case in @sc{ASCII} control characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
823 The printed representation of a string consists of a double-quote, the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
824 characters it contains, and another double-quote. However, you must
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
825 escape any backslash or double-quote characters in the string with a
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
826 backslash, like this: @code{"this \" is an embedded quote"}.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
827
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
828 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
829 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
830 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
831 by @samp{\}---does not become part of the string; i.e., the Lisp reader
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
832 ignores an escaped newline while reading a string.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 @cindex newline in strings
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 "It is useful to include newlines
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 in documentation strings,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 but the newline is \
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 ignored if escaped."
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 @result{} "It is useful to include newlines
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 in documentation strings,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 but the newline is ignored if escaped."
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 A string can hold properties of the text it contains, in addition to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 the characters themselves. This enables programs that copy text between
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 strings and buffers to preserve the properties with no special effort.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 @xref{Text Properties}. Strings with text properties have a special
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 read and print syntax:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 #("@var{characters}" @var{property-data}...)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 where @var{property-data} consists of zero or more elements, in groups
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 of three as follows:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @var{beg} @var{end} @var{plist}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 @noindent
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 The elements @var{beg} and @var{end} are integers, and together specify
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 a range of indices in the string; @var{plist} is the property list for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 that range.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 @xref{Strings and Characters}, for functions that work on strings.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 @node Vector Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 @subsection Vector Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 A @dfn{vector} is a one-dimensional array of elements of any type. It
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 takes a constant amount of time to access any element of a vector. (In
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 a list, the access time of an element is proportional to the distance of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 the element from the beginning of the list.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 The printed representation of a vector consists of a left square
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 bracket, the elements, and a right square bracket. This is also the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 read syntax. Like numbers and strings, vectors are considered constants
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 for evaluation.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 [1 "two" (three)] ; @r{A vector of three elements.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 @result{} [1 "two" (three)]
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 @xref{Vectors}, for functions that work with vectors.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
890 @node Function Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
891 @subsection Function Type
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 Just as functions in other programming languages are executable,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 @dfn{Lisp function} objects are pieces of executable code. However,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 functions in Lisp are primarily Lisp objects, and only secondarily the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 text which represents them. These Lisp objects are lambda expressions:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 lists whose first element is the symbol @code{lambda} (@pxref{Lambda
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 Expressions}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 In most programming languages, it is impossible to have a function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 without a name. In Lisp, a function has no intrinsic name. A lambda
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 expression is also called an @dfn{anonymous function} (@pxref{Anonymous
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 Functions}). A named function in Lisp is actually a symbol with a valid
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 function in its function cell (@pxref{Defining Functions}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 Most of the time, functions are called when their names are written in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 Lisp expressions in Lisp programs. However, you can construct or obtain
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 a function object at run time and then call it with the primitive
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 functions @code{funcall} and @code{apply}. @xref{Calling Functions}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
911 @node Macro Type
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
912 @subsection Macro Type
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 language. It is represented as an object much like a function, but with
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 different parameter-passing semantics. A Lisp macro has the form of a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 list whose first element is the symbol @code{macro} and whose @sc{cdr}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 is a Lisp function object, including the @code{lambda} symbol.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 Lisp macro objects are usually defined with the built-in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 @code{defmacro} function, but any list that begins with @code{macro} is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 a macro as far as Emacs is concerned. @xref{Macros}, for an explanation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 of how to write a macro.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 @node Primitive Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 @subsection Primitive Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 @cindex special forms
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 A @dfn{primitive function} is a function callable from Lisp but
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 written in the C programming language. Primitive functions are also
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 called @dfn{subrs} or @dfn{built-in functions}. (The word ``subr'' is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 derived from ``subroutine''.) Most primitive functions evaluate all
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 their arguments when they are called. A primitive function that does
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 not evaluate all its arguments is called a @dfn{special form}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (@pxref{Special Forms}).@refill
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 It does not matter to the caller of a function whether the function is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 primitive. However, this does matter if you try to substitute a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 function written in Lisp for a primitive of the same name. The reason
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 is that the primitive function may be called directly from C code.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 Calls to the redefined function from Lisp will use the new definition,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 but calls from C code may still use the built-in definition.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 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
945 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
946 functions written in Lisp.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 Primitive functions have no read syntax and print in hash notation
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 with the name of the subroutine.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (symbol-function 'car) ; @r{Access the function cell}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 ; @r{of the symbol.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 @result{} #<subr car>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 (subrp (symbol-function 'car)) ; @r{Is this a primitive function?}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 @result{} t ; @r{Yes.}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 @node Byte-Code Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 @subsection Byte-Code Function Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 The byte compiler produces @dfn{byte-code function objects}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 Internally, a byte-code function object is much like a vector; however,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 the evaluator handles this data type specially when it appears as a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 function to be called. @xref{Byte Compilation}, for information about
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 the byte compiler.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
970 The printed representation and read syntax for a byte-code function
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
971 object is like that for a vector, with an additional @samp{#} before the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
972 opening @samp{[}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 @node Autoload Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 @subsection Autoload Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 An @dfn{autoload object} is a list whose first element is the symbol
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 @code{autoload}. It is stored as the function definition of a symbol as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 a placeholder for the real definition; it says that the real definition
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 is found in a file of Lisp code that should be loaded when necessary.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 The autoload object contains the name of the file, plus some other
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 information about the real definition.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 After the file has been loaded, the symbol should have a new function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 definition that is not an autoload object. The new definition is then
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 called as if it had been there to begin with. From the user's point of
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 view, the function call works as expected, using the function definition
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 in the loaded file.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 An autoload object is usually created with the function
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 @code{autoload}, which stores the object in the function cell of a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 symbol. @xref{Autoload}, for more details.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 @node Editing Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 @section Editing Types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 @cindex editing types
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 The types in the previous section are common to many Lisp dialects.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 Emacs Lisp provides several additional data types for purposes connected
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 with editing.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 @menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 * Buffer Type:: The basic object of editing.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 * Marker Type:: A position in a buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 * Window Type:: Buffers are displayed in windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 * Frame Type:: Windows subdivide frames.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 * Window Configuration Type:: Recording the way a frame is subdivided.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 * Process Type:: A process running on the underlying OS.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 * Stream Type:: Receive or send characters.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 * Keymap Type:: What function a keystroke invokes.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 * Syntax Table Type:: What a character means.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 * Display Table Type:: How display tables are represented.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 * Overlay Type:: How an overlay is represented.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 @end menu
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 @node Buffer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 @subsection Buffer Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 A @dfn{buffer} is an object that holds text that can be edited
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 (@pxref{Buffers}). Most buffers hold the contents of a disk file
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (@pxref{Files}) so they can be edited, but some are used for other
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 purposes. Most buffers are also meant to be seen by the user, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 therefore displayed, at some time, in a window (@pxref{Windows}). But a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 buffer need not be displayed in any window.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 The contents of a buffer are much like a string, but buffers are not
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 used like strings in Emacs Lisp, and the available operations are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 different. For example, insertion of text into a buffer is very
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 efficient, whereas ``inserting'' text into a string requires
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 concatenating substrings, and the result is an entirely new string
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 object.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 Each buffer has a designated position called @dfn{point}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 (@pxref{Positions}). At any time, one buffer is the @dfn{current
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 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
1036 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
1037 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
1038 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
1039 (@pxref{Text}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 Several other data structures are associated with each buffer:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 @itemize @bullet
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 @item
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 a local syntax table (@pxref{Syntax Tables});
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 @item
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 a local keymap (@pxref{Keymaps}); and,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 @item
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 a local variable binding list (@pxref{Buffer-Local Variables}).
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1052
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1053 @item
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1054 a list of overlays (@pxref{Overlays}).
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1055
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1056 @item
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1057 text properties for the text in the buffer (@pxref{Text Properties}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 @end itemize
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 @noindent
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1061 The local keymap and variable list contain entries that individually
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 override global bindings or values. These are used to customize the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 behavior of programs in different buffers, without actually changing the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 programs.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1066 A buffer may be @dfn{indirect}, which means it shares the text
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1067 of another buffer. @xref{Indirect Buffers}.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1068
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1069 Buffers have no read syntax. They print in hash notation, showing the
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 buffer name.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (current-buffer)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 @result{} #<buffer objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 @node Marker Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 @subsection Marker Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 A @dfn{marker} denotes a position in a specific buffer. Markers
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 therefore have two components: one for the buffer, and one for the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 position. Changes in the buffer's text automatically relocate the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 position value as necessary to ensure that the marker always points
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 between the same two characters in the buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 Markers have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 current character position and the name of the buffer.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (point-marker)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 @result{} #<marker at 10779 in objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 @xref{Markers}, for information on how to test, create, copy, and move
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 markers.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 @node Window Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 @subsection Window Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 A @dfn{window} describes the portion of the terminal screen that Emacs
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 uses to display a buffer. Every window has one associated buffer, whose
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 contents appear in the window. By contrast, a given buffer may appear
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 in one window, no window, or several windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 Though many windows may exist simultaneously, at any time one window
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 is designated the @dfn{selected window}. This is the window where the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 cursor is (usually) displayed when Emacs is ready for a command. The
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 selected window usually displays the current buffer, but this is not
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 necessarily the case.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 Windows are grouped on the screen into frames; each window belongs to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 one and only one frame. @xref{Frame Type}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 Windows have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 window number and the name of the buffer being displayed. The window
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 numbers exist to identify windows uniquely, since the buffer displayed
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 in any given window can change frequently.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (selected-window)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 @result{} #<window 1 on objects.texi>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 @xref{Windows}, for a description of the functions that work on windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 @node Frame Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 @subsection Frame Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 A @var{frame} is a rectangle on the screen that contains one or more
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 Emacs windows. A frame initially contains a single main window (plus
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 perhaps a minibuffer window) which you can subdivide vertically or
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 horizontally into smaller windows.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 Frames have no read syntax. They print in hash notation, giving the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 frame's title, plus its address in core (useful to identify the frame
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 uniquely).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (selected-frame)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 @result{} #<frame xemacs@@mole.gnu.ai.mit.edu 0xdac80>
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 @xref{Frames}, for a description of the functions that work on frames.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 @node Window Configuration Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 @subsection Window Configuration Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 @cindex screen layout
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 A @dfn{window configuration} stores information about the positions,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 sizes, and contents of the windows in a frame, so you can recreate the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 same arrangement of windows later.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160
16736
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1161 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
1162 looks like @samp{#<window-configuration>}. @xref{Window
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1163 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
1164 window configurations.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 @node Process Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 @subsection Process Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 The word @dfn{process} usually means a running program. Emacs itself
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 runs in a process of this sort. However, in Emacs Lisp, a process is a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 Lisp object that designates a subprocess created by the Emacs process.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 Programs such as shells, GDB, ftp, and compilers, running in
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 subprocesses of Emacs, extend the capabilities of Emacs.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 An Emacs subprocess takes textual input from Emacs and returns textual
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 output to Emacs for further manipulation. Emacs can also send signals
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 to the subprocess.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 Process objects have no read syntax. They print in hash notation,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 giving the name of the process:
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 (process-list)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 @result{} (#<process shell>)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 @xref{Processes}, for information about functions that create, delete,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 return information about, send input or signals to, and receive output
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 from processes.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 @node Stream Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 @subsection Stream Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 A @dfn{stream} is an object that can be used as a source or sink for
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 characters---either to supply characters for input or to accept them as
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 output. Many different types can be used this way: markers, buffers,
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 strings, and functions. Most often, input streams (character sources)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 obtain characters from the keyboard, a buffer, or a file, and output
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 streams (character sinks) send characters to a buffer, such as a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 @file{*Help*} buffer, or to the echo area.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 The object @code{nil}, in addition to its other meanings, may be used
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 as a stream. It stands for the value of the variable
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 @code{standard-input} or @code{standard-output}. Also, the object
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 @code{t} as a stream specifies input using the minibuffer
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 (@pxref{Minibuffers}) or output in the echo area (@pxref{The Echo
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 Area}).
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 Streams have no special printed representation or read syntax, and
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 print as whatever primitive type they are.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213
7337
cd57cd335fff *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
1214 @xref{Read and Print}, for a description of functions
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1215 related to streams, including parsing and printing functions.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 @node Keymap Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 @subsection Keymap Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 A @dfn{keymap} maps keys typed by the user to commands. This mapping
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 controls how the user's command input is executed. A keymap is actually
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 a list whose @sc{car} is the symbol @code{keymap}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 @xref{Keymaps}, for information about creating keymaps, handling prefix
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 keys, local as well as global keymaps, and changing key bindings.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 @node Syntax Table Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 @subsection Syntax Table Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 A @dfn{syntax table} is a vector of 256 integers. Each element of the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 vector defines how one character is interpreted when it appears in a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 buffer. For example, in C mode (@pxref{Major Modes}), the @samp{+}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 character is punctuation, but in Lisp mode it is a valid character in a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 symbol. These modes specify different interpretations by changing the
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 syntax table entry for @samp{+}, at index 43 in the syntax table.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1237 Syntax tables are used only for scanning text in buffers, not for
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 reading Lisp expressions. The table the Lisp interpreter uses to read
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 expressions is built into the Emacs source code and cannot be changed;
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 thus, to change the list delimiters to be @samp{@{} and @samp{@}}
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 instead of @samp{(} and @samp{)} would be impossible.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 @xref{Syntax Tables}, for details about syntax classes and how to make
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 and modify syntax tables.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 @node Display Table Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 @subsection Display Table Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 A @dfn{display table} specifies how to display each character code.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 Each buffer and each window can have its own display table. A display
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1251 table is actually a vector of length 262. @xref{Display Tables}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 @node Overlay Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 @subsection Overlay Type
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 An @dfn{overlay} specifies temporary alteration of the display
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 appearance of a part of a buffer. It contains markers delimiting a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 range of the buffer, plus a property list (a list whose elements are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 alternating property names and values). Overlays are used to present
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1260 parts of the buffer temporarily in a different display style. They have
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1261 no read syntax, and print in hash notation, giving the buffer name and
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1262 range of positions.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1264 @xref{Overlays}, for how to create and use overlays.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 @node Type Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 @section Type Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 @cindex predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 @cindex type checking
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 @kindex wrong-type-argument
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 The Emacs Lisp interpreter itself does not perform type checking on
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 the actual arguments passed to functions when they are called. It could
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 not do so, since function arguments in Lisp do not have declared data
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 types, as they do in other programming languages. It is therefore up to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 the individual function to test whether each actual argument belongs to
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 a type that the function can use.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 All built-in functions do check the types of their actual arguments
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 when appropriate, and signal a @code{wrong-type-argument} error if an
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 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
1282 pass an argument to @code{+} that it cannot handle:
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 (+ 2 'a)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 @error{} Wrong type argument: integer-or-marker-p, a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 @cindex type predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 @cindex testing types
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1293 If you want your program to handle different types differently, you
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1294 must do explicit type checking. The most common way to check the type
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1295 of an object is to call a @dfn{type predicate} function. Emacs has a
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1296 type predicate for each type, as well as some predicates for
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1297 combinations of types.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1298
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1299 A type predicate function takes one argument; it returns @code{t} if
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1300 the argument belongs to the appropriate type, and @code{nil} otherwise.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1301 Following a general Lisp convention for predicate functions, most type
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1302 predicates' names end with @samp{p}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1303
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1304 Here is an example which uses the predicates @code{listp} to check for
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1305 a list and @code{symbolp} to check for a symbol.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1307 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1308 (defun add-on (x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1309 (cond ((symbolp x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1310 ;; If X is a symbol, put it on LIST.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1311 (setq list (cons x list)))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1312 ((listp x)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1313 ;; If X is a list, add its elements to LIST.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1314 (setq list (append x list)))
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
1315 @need 3000
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1316 (t
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1317 ;; We only handle symbols and lists.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1318 (error "Invalid argument %s in add-on" x))))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1319 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1320
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1321 Here is a table of predefined type predicates, in alphabetical order,
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 with references to further information.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 @table @code
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 @item atom
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 @xref{List-related Predicates, atom}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 @item arrayp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 @xref{Array Functions, arrayp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 @item bufferp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 @xref{Buffer Basics, bufferp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 @item byte-code-function-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 @xref{Byte-Code Type, byte-code-function-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 @item case-table-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 @xref{Case Table, case-table-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 @item char-or-string-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 @xref{Predicates for Strings, char-or-string-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 @item commandp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 @xref{Interactive Call, commandp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 @item consp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 @xref{List-related Predicates, consp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 @item floatp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 @xref{Predicates on Numbers, floatp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 @item frame-live-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 @xref{Deleting Frames, frame-live-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 @item framep
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 @xref{Frames, framep}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 @item integer-or-marker-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 @xref{Predicates on Markers, integer-or-marker-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 @item integerp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 @xref{Predicates on Numbers, integerp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 @item keymapp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 @xref{Creating Keymaps, keymapp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 @item listp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 @xref{List-related Predicates, listp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 @item markerp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 @xref{Predicates on Markers, markerp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1373 @item wholenump
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1374 @xref{Predicates on Numbers, wholenump}.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 @item nlistp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 @xref{List-related Predicates, nlistp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 @item numberp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 @xref{Predicates on Numbers, numberp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 @item number-or-marker-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 @xref{Predicates on Markers, number-or-marker-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 @item overlayp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 @xref{Overlays, overlayp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 @item processp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 @xref{Processes, processp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 @item sequencep
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 @xref{Sequence Functions, sequencep}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 @item stringp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 @xref{Predicates for Strings, stringp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 @item subrp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 @xref{Function Cells, subrp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 @item symbolp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 @xref{Symbols, symbolp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 @item syntax-table-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 @xref{Syntax Tables, syntax-table-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 @item user-variable-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 @xref{Defining Variables, user-variable-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 @item vectorp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 @xref{Vectors, vectorp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 @item window-configuration-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 @xref{Window Configurations, window-configuration-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 @item window-live-p
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 @xref{Deleting Windows, window-live-p}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 @item windowp
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 @xref{Basic Windows, windowp}.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 @end table
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1422 The most general way to check the type of an object is to call the
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1423 function @code{type-of}. Recall that each object belongs to one and
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1424 only one primitive type; @code{type-of} tells you which one (@pxref{Lisp
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1425 Data Types}). But @code{type-of} knows nothing about non-primitive
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1426 types. In most cases, it is more convenient to use type predicates than
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1427 @code{type-of}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1428
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1429 @defun type-of object
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1430 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
1431 @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
1432 @code{integer}, @code{float}, @code{string}, @code{cons}, @code{vector},
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1433 @code{marker}, @code{overlay}, @code{window}, @code{buffer},
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1434 @code{subr}, @code{compiled-function}, @code{process}, or
981e116b4ac6 Minor cleanups for overfull hboxes.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
1435 @code{window-configuration}.
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1436
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1437 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1438 (type-of 1)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1439 @result{} integer
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1440 (type-of 'nil)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1441 @result{} symbol
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1442 (type-of '()) ; @r{@code{()} is @code{nil}.}
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1443 @result{} symbol
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1444 (type-of '(x))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1445 @result{} cons
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1446 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1447 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1448
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 @node Equality Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 @section Equality Predicates
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 @cindex equality
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 Here we describe two functions that test for equality between any two
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 objects. Other functions test equality between objects of specific
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6447
diff changeset
1455 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
1456 describing the data type.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 @defun eq object1 object2
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 This function returns @code{t} if @var{object1} and @var{object2} are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 the same object, @code{nil} otherwise. The ``same object'' means that a
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 change in one will be reflected by the same change in the other.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 @code{eq} returns @code{t} if @var{object1} and @var{object2} are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 integers with the same value. Also, since symbol names are normally
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 unique, if the arguments are symbols with the same name, they are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 @code{eq}. For other types (e.g., lists, vectors, strings), two
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 arguments with the same contents or elements are not necessarily
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 @code{eq} to each other: they are @code{eq} only if they are the same
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 object.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 (The @code{make-symbol} function returns an uninterned symbol that is
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 not interned in the standard @code{obarray}. When uninterned symbols
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 are in use, symbol names are no longer unique. Distinct symbols with
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 the same name are not @code{eq}. @xref{Creating Symbols}.)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 (eq 'foo 'foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 (eq 456 456)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 (eq "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 (eq '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 (setq foo '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 @result{} (1 (2 (3)))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 (eq foo foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 (eq foo '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 (eq [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 (eq (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 @end defun
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 @defun equal object1 object2
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 This function returns @code{t} if @var{object1} and @var{object2} have
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 equal components, @code{nil} otherwise. Whereas @code{eq} tests if its
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 arguments are the same object, @code{equal} looks inside nonidentical
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 arguments to see if their elements are the same. So, if two objects are
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 @code{eq}, they are @code{equal}, but the converse is not always true.
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 (equal 'foo 'foo)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 (equal 456 456)
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 (equal "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 (eq "asdf" "asdf")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 (equal '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 (eq '(1 (2 (3))) '(1 (2 (3))))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 (equal [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 (eq [(1 2) 3] [(1 2) 3])
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 (equal (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 @result{} t
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 (eq (point-marker) (point-marker))
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 @end example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1575 Comparison of strings is case-sensitive and takes account of text
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1576 properties as well as the characters in the strings. To compare
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1577 two strings' characters without comparing their text properties,
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 10559
diff changeset
1578 use @code{string=} (@pxref{Text Comparison}).
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 @example
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 @group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 (equal "asdf" "ASDF")
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 @result{} nil
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 @end group
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 @end example
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1586
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1587 Two distinct buffers are never @code{equal}, even if their contents
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
1588 are the same.
6447
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 @end defun
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 The test for equality is implemented recursively, and circular lists may
dcbbdafaf41e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 therefore cause infinite recursion (leading to an error).