annotate man/lispref/objects.texi @ 5753:dbd8305e13cb

Warn about non-string non-integer ARG to #'gensym, bytecomp.el. lisp/ChangeLog addition: 2013-08-21 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el: * bytecomp.el (gensym): * bytecomp.el (byte-compile-gensym): New. Warn that gensym called in a for-effect context is unlikely to be useful. Warn about non-string non-integer ARGs, this is incorrect. Am not changing the function to error with same, most code that makes the mistake is has no problems, which is why it has survived so long. * window-xemacs.el (save-window-excursion/mapping): * window.el (save-window-excursion): Call #'gensym with a string, not a symbol.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 21 Aug 2013 19:02:59 +0100
parents d967d96ca043
children 9fae6227ede5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/objects.info
693
b05e2a249757 [xemacs-hg @ 2001-12-14 07:50:06 by stephent]
stephent
parents: 444
diff changeset
6 @node Lisp Data Types, Numbers, Packaging, Top
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Lisp Data Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @cindex object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 @cindex Lisp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 @cindex type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 @cindex data type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 A Lisp @dfn{object} is a piece of data used and manipulated by Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 programs. For our purposes, a @dfn{type} or @dfn{data type} is a set of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 possible objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 Every object belongs to at least one type. Objects of the same type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 have similar structures and may usually be used in the same contexts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Types can overlap, and objects can belong to two or more types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Consequently, we can ask whether an object belongs to a particular type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 but not for ``the'' type of an object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 @cindex primitive type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 A few fundamental object types are built into XEmacs. These, from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 which all other types are constructed, are called @dfn{primitive types}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 Each object belongs to one and only one primitive type. These types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 include @dfn{integer}, @dfn{character} (starting with XEmacs 20.0),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 @dfn{float}, @dfn{cons}, @dfn{symbol}, @dfn{string}, @dfn{vector},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 @dfn{bit-vector}, @dfn{subr}, @dfn{compiled-function}, @dfn{hash-table},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 @dfn{range-table}, @dfn{char-table}, @dfn{weak-list}, and several
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 special types, such as @dfn{buffer}, that are related to editing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 (@xref{Editing Types}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 Each primitive type has a corresponding Lisp function that checks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 whether an object is a member of that type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 Note that Lisp is unlike many other languages in that Lisp objects are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 @dfn{self-typing}: the primitive type of the object is implicit in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 object itself. For example, if an object is a vector, nothing can treat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 it as a number; Lisp knows it is a vector, not a number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 In most languages, the programmer must declare the data type of each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 variable, and the type is known by the compiler but not represented in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 the data. Such type declarations do not exist in XEmacs Lisp. A Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 variable can have any type of value, and it remembers whatever value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 you store in it, type and all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 This chapter describes the purpose, printed representation, and read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 syntax of each of the standard types in Emacs Lisp. Details on how
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 to use these types can be found in later chapters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 * Printed Representation:: How Lisp objects are represented as text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 * Comments:: Comments and their formatting conventions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 * Primitive Types:: List of all primitive types in XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 * Programming Types:: Types found in all Lisp systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 * Editing Types:: Types specific to XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 * Window-System Types:: Types specific to windowing systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 * Type Predicates:: Tests related to types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 * Equality Predicates:: Tests of equality between any two objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 @node Printed Representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 @section Printed Representation and Read Syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 @cindex printed representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 @cindex read syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 The @dfn{printed representation} of an object is the format of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 output generated by the Lisp printer (the function @code{prin1}) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 that object. The @dfn{read syntax} of an object is the format of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 input accepted by the Lisp reader (the function @code{read}) for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 object. Most objects have more than one possible read syntax. Some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 types of object have no read syntax; except for these cases, the printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 representation of an object is also a read syntax for it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 In other languages, an expression is text; it has no other form. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 Lisp, an expression is primarily a Lisp object and only secondarily the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 text that is the object's read syntax. Often there is no need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 emphasize this distinction, but you must keep it in the back of your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 mind, or you will occasionally be very confused.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 @cindex hash notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 Every type has a printed representation. Some types have no read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 syntax, since it may not make sense to enter objects of these types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 directly in a Lisp program. For example, the buffer type does not have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 a read syntax. Objects of these types are printed in @dfn{hash
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 notation}: the characters @samp{#<} followed by a descriptive string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 (typically the type name followed by the name of the object), and closed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 with a matching @samp{>}. Hash notation cannot be read at all, so the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 Lisp reader signals the error @code{invalid-read-syntax} whenever it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 encounters @samp{#<}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 @kindex invalid-read-syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 (current-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 @result{} #<buffer "objects.texi">
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 When you evaluate an expression interactively, the Lisp interpreter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 first reads the textual representation of it, producing a Lisp object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 and then evaluates that object (@pxref{Evaluation}). However,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 evaluation and reading are separate activities. Reading returns the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 Lisp object represented by the text that is read; the object may or may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 not be evaluated later. @xref{Input Functions}, for a description of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @code{read}, the basic function for reading objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 @node Comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 @section Comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 @cindex comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 @cindex @samp{;} in comment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 A @dfn{comment} is text that is written in a program only for the sake
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 of humans that read the program, and that has no effect on the meaning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 of the program. In Lisp, a semicolon (@samp{;}) starts a comment if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 is not within a string or character constant. The comment continues to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 the end of line. The Lisp reader discards comments; they do not become
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 part of the Lisp objects which represent the program within the Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 The @samp{#@@@var{count}} construct, which skips the next @var{count}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 characters, is useful for program-generated comments containing binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 data. The XEmacs Lisp byte compiler uses this in its output files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 (@pxref{Byte Compilation}). It isn't meant for source files, however.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 @xref{Comment Tips}, for conventions for formatting comments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 @node Primitive Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 @section Primitive Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 @cindex primitive types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 For reference, here is a list of all the primitive types that may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 exist in XEmacs. Note that some of these types may not exist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 in some XEmacs executables; that depends on the options that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 XEmacs was configured with.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 bit-vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 char-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 coding-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 color-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 compiled-function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 database
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 extent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 font-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 hash-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 range-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 subwindow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 toolbar-button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 tooltalk-message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 tooltalk-pattern
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 weak-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 window-configuration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 x-resource
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 In addition, the following special types are created internally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 but will never be seen by Lisp code. You may encounter them,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 however, if you are debugging XEmacs. The printed representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 of these objects begins @samp{#<INTERNAL EMACS BUG}, which indicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 to the Lisp programmer that he has found an internal bug in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 if he ever encounters any of these objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 char-table-entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 command-builder
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 extent-auxiliary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 extent-info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 lcrecord-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 lstream
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 opaque
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 opaque-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 popup-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 symbol-value-buffer-local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 symbol-value-forward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 symbol-value-lisp-magic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 symbol-value-varalias
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 toolbar-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 @node Programming Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 @section Programming Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 @cindex programming types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 There are two general categories of types in XEmacs Lisp: those having
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 to do with Lisp programming, and those having to do with editing. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 former exist in many Lisp implementations, in one form or another. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 latter are unique to XEmacs Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 * Integer Type:: Numbers without fractional parts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 * Floating Point Type:: Numbers with fractional parts and with a large range.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 * Character Type:: The representation of letters, numbers and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 control characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 * Symbol Type:: A multi-use object that refers to a function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 variable, or property list, and has a unique identity.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 * Sequence Type:: Both lists and arrays are classified as sequences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 * Cons Cell Type:: Cons cells, and lists (which are made from cons cells).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 * Array Type:: Arrays include strings and vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 * String Type:: An (efficient) array of characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 * Vector Type:: One-dimensional arrays.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 * Bit Vector Type:: An (efficient) array of bits.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 * Function Type:: A piece of executable code you can call from elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 * Macro Type:: A method of expanding an expression into another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 expression, more fundamental but less pretty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 * Primitive Function Type:: A function written in C, callable from Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 * Compiled-Function Type:: A function written in Lisp, then compiled.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 * Autoload Type:: A type used for automatically loading seldom-used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 * Char Table Type:: A mapping from characters to Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 * Hash Table Type:: A fast mapping between Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 * Range Table Type:: A mapping from ranges of integers to Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 * Weak List Type:: A list with special garbage-collection properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 @node Integer Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 @subsection Integer Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
293 In XEmacs Lisp, integers can be fixnums (that is, fixed-precision
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
294 integers) or bignums (arbitrary-precision integers), if compile-time
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
295 configuration supports this. The read syntax for the two types is the
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
296 same, the type chosen depending on the numeric values involved.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
297
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
298 The range of values for fixnums in XEmacs Lisp is given by the
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
299 constants @code{most-positive-fixnum} and @code{most-negative-fixnum}.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
300 On 32-bit machines, these constants reflect 31 value bits, ranging from
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
301 @minus{}1073741824 to 1073741823.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
302
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
303 In the absence of @xref{The Bignum Extension}, XEmacs Lisp
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
304 arithmetic functions do not check for overflow; so the code snippet
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
305 @code{(= most-negative-fixnum (1+ most-positive-fixnum))} will give
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
306 @code{t}. However, you @emph{will} get an error if you attempt to read
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
307 an out-of-range number using the Lisp reader.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
308
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
309 The main read syntax for integers is a sequence of base ten digits
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
310 with an optional sign at the beginning. (The printed representation
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
311 produced by the Lisp interpreter never has a leading @samp{+}.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 -1 ; @r{The integer -1.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 1 ; @r{The integer 1.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 +1 ; @r{Also the integer 1.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 268435457 ; @r{Causes an error on a 28-bit implementation.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 @xref{Numbers}, for more information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 @node Floating Point Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 @subsection Floating Point Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 XEmacs supports floating point numbers. The precise range of floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 point numbers is machine-specific.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 The printed representation for floating point numbers requires either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 a decimal point (with at least one digit following), an exponent, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 @samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 number whose value is 1500. They are all equivalent.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 @xref{Numbers}, for more information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 @node Character Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 @subsection Character Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 @cindex @sc{ascii} character codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 @cindex char-int confoundance disease
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 In XEmacs version 19, and in all versions of FSF GNU Emacs, a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 @dfn{character} in XEmacs Lisp is nothing more than an integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 This is yet another holdover from XEmacs Lisp's derivation from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 vintage-1980 Lisps; modern versions of Lisp consider this equivalence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 a bad idea, and have separate character types. In XEmacs version 20,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 the modern convention is followed, and characters are their own
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 primitive types. (This change was necessary in order for @sc{mule},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 i.e. Asian-language, support to be correctly implemented.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 Every character has an equivalent integer, called the @dfn{character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 code}. For example, the character @kbd{A} is represented as the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 @w{integer 65}, following the standard @sc{ascii} representation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 characters. If XEmacs was not compiled with @sc{mule} support, the
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
356 range of this integer will always be 0 to 255---eight bits, or one
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 byte. (Integers outside this range are accepted but silently truncated;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 however, you should most decidedly @emph{not} rely on this, because it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 will not work under XEmacs with @sc{mule} support.) When @sc{mule}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 support is present, the range of character codes is much
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 larger. (Currently, 19 bits are used.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 FSF GNU Emacs uses kludgy character codes above 255 to represent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 keyboard input of @sc{ascii} characters in combination with certain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 modifiers. XEmacs does not use this (a more general mechanism is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 used that does not distinguish between @sc{ascii} keys and other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 keys), so you will never find character codes above 255 in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 non-@sc{mule} XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 Individual characters are not often used in programs. It is far more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 common to work with @emph{strings}, which are sequences composed of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 characters. @xref{String Type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 @cindex read syntax for characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 @cindex printed representation for characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 @cindex syntax for characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 The read syntax for characters begins with a question mark, followed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 by the character (if it's printable) or some symbolic representation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 it. In XEmacs 20, where characters are their own type, this is also the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 print representation. In XEmacs 19, however, where characters are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 really integers, the printed representation of a character is a decimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 number. This is also a possible read syntax for a character, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 writing characters that way in Lisp programs is a very bad idea. You
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 should @emph{always} use the special read syntax formats that XEmacs Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 provides for characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 The usual read syntax for alphanumeric characters is a question mark
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 followed by the character; thus, @samp{?A} for the character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @kbd{A}, @samp{?B} for the character @kbd{B}, and @samp{?a} for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 character @kbd{a}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 ;; @r{Under XEmacs 20:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 ?Q @result{} ?Q ?q @result{} ?q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 (char-int ?Q) @result{} 81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 ;; @r{Under XEmacs 19:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 ?Q @result{} 81 ?q @result{} 113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 You can use the same syntax for punctuation characters, but it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 often a good idea to add a @samp{\} so that the Emacs commands for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 editing Lisp code don't get confused. For example, @samp{?\ } is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 way to write the space character. If the character is @samp{\}, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 @emph{must} use a second @samp{\} to quote it: @samp{?\\}. XEmacs 20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 always prints punctuation characters with a @samp{\} in front of them,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 to avoid confusion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 @cindex whitespace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 @cindex bell character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 @cindex @samp{\a}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @cindex backspace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 @cindex @samp{\b}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 @cindex tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 @cindex @samp{\t}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 @cindex vertical tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 @cindex @samp{\v}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 @cindex formfeed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 @cindex @samp{\f}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 @cindex newline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 @cindex @samp{\n}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 @cindex return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @cindex @samp{\r}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 @cindex escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 @cindex @samp{\e}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 You can express the characters Control-g, backspace, tab, newline,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 vertical tab, formfeed, return, and escape as @samp{?\a}, @samp{?\b},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 @samp{?\t}, @samp{?\n}, @samp{?\v}, @samp{?\f}, @samp{?\r}, @samp{?\e},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 respectively. Their character codes are 7, 8, 9, 10, 11, 12, 13, and 27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 in decimal. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 ;; @r{Under XEmacs 20:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 ?\a @result{} ?\^G ; @r{@kbd{C-g}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 (char-int ?\a) @result{} 7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 ?\b @result{} ?\^H ; @r{backspace, @key{BS}, @kbd{C-h}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 (char-int ?\b) @result{} 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 ?\t @result{} ?\t ; @r{tab, @key{TAB}, @kbd{C-i}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (char-int ?\t) @result{} 9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 ?\n @result{} ?\n ; @r{newline, @key{LFD}, @kbd{C-j}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 ?\v @result{} ?\^K ; @r{vertical tab, @kbd{C-k}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 ?\f @result{} ?\^L ; @r{formfeed character, @kbd{C-l}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 ?\r @result{} ?\r ; @r{carriage return, @key{RET}, @kbd{C-m}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 ?\e @result{} ?\^[ ; @r{escape character, @key{ESC}, @kbd{C-[}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 ?\\ @result{} ?\\ ; @r{backslash character, @kbd{\}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 ;; @r{Under XEmacs 19:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 ?\a @result{} 7 ; @r{@kbd{C-g}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 ?\b @result{} 8 ; @r{backspace, @key{BS}, @kbd{C-h}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 ?\t @result{} 9 ; @r{tab, @key{TAB}, @kbd{C-i}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 ?\n @result{} 10 ; @r{newline, @key{LFD}, @kbd{C-j}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 ?\v @result{} 11 ; @r{vertical tab, @kbd{C-k}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 ?\f @result{} 12 ; @r{formfeed character, @kbd{C-l}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 ?\r @result{} 13 ; @r{carriage return, @key{RET}, @kbd{C-m}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 ?\e @result{} 27 ; @r{escape character, @key{ESC}, @kbd{C-[}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 ?\\ @result{} 92 ; @r{backslash character, @kbd{\}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 @cindex escape sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 These sequences which start with backslash are also known as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 @dfn{escape sequences}, because backslash plays the role of an escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 character; this usage has nothing to do with the character @key{ESC}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @cindex control characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 Control characters may be represented using yet another read syntax.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 This consists of a question mark followed by a backslash, caret, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 corresponding non-control character, in either upper or lower case. For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 example, both @samp{?\^I} and @samp{?\^i} are valid read syntax for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 character @kbd{C-i}, the character whose value is 9.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 Instead of the @samp{^}, you can use @samp{C-}; thus, @samp{?\C-i} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 equivalent to @samp{?\^I} and to @samp{?\^i}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 ;; @r{Under XEmacs 20:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 ?\^I @result{} ?\t ?\C-I @result{} ?\t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 (char-int ?\^I) @result{} 9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 ;; @r{Under XEmacs 19:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 ?\^I @result{} 9 ?\C-I @result{} 9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 There is also a character read syntax beginning with @samp{\M-}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 sets the high bit of the character code (same as adding 128 to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 character code). For example, @samp{?\M-A} stands for the character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 with character code 193, or 128 plus 65. You should @emph{not} use this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 syntax in your programs. It is a holdover of yet another confoundance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 disease from earlier Emacsen. (This was used to represent keyboard input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 with the @key{META} key set, thus the @samp{M}; however, it conflicts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 with the legitimate @sc{iso}-8859-1 interpretation of the character code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 For example, character code 193 is a lowercase @samp{a} with an acute
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 accent, in @sc{iso}-8859-1.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493
3367
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
494 @cindex unicode character escape
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
495 From version 21.5.25 onwards, XEmacs provides a syntax for specifying
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
496 characters by their Unicode code points. @samp{?\uABCD} will give you
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
497 an XEmacs character that maps to the code point @samp{U+ABCD} in
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
498 Unicode-based representations (UTF-8 text files, Unicode-oriented fonts,
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
499 etc.) Just as in the C# language, there is a slightly different syntax
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
500 for specifying characters with code points above @samp{#xFFFF};
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
501 @samp{\U00ABCDEF} will give you an XEmacs character that maps to the
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
502 code point @samp{U+ABCDEF} in Unicode-based representations, if such an
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
503 XEmacs character exists.
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
504
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
505 Unlike in C#, while this syntax is available for character literals,
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
506 and (see later) in strings, it is not available elsewhere in your Lisp
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
507 source code.
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
508
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 @ignore @c None of this crap applies to XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 For use in strings and buffers, you are limited to the control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 characters that exist in @sc{ascii}, but for keyboard input purposes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 you can turn any character into a control character with @samp{C-}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 character codes for these non-@sc{ascii} control characters include the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 $2^{26}$
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 2**26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 bit as well as the code for the corresponding non-control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 character. Ordinary terminals have no way of generating non-@sc{ASCII}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 control characters, but you can generate them straightforwardly using an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 X terminal.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 For historical reasons, Emacs treats the @key{DEL} character as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 the control equivalent of @kbd{?}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 ?\^? @result{} 127 ?\C-? @result{} 127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 As a result, it is currently not possible to represent the character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 @kbd{Control-?}, which is a meaningful input character under X. It is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 not easy to change this as various Lisp files refer to @key{DEL} in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 For representing control characters to be found in files or strings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 we recommend the @samp{^} syntax; for control characters in keyboard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 input, we prefer the @samp{C-} syntax. This does not affect the meaning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 of the program, but may guide the understanding of people who read it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 @cindex meta characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 A @dfn{meta character} is a character typed with the @key{META}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 modifier key. The integer that represents such a character has the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 $2^{27}$
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 2**27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 bit set (which on most machines makes it a negative number). We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 use high bits for this and other modifiers to make possible a wide range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 of basic character codes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 In a string, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 $2^{7}$
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 2**7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 bit indicates a meta character, so the meta
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 characters that can fit in a string have codes in the range from 128 to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 255, and are the meta versions of the ordinary @sc{ASCII} characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 (In Emacs versions 18 and older, this convention was used for characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 outside of strings as well.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 The read syntax for meta characters uses @samp{\M-}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 @samp{?\M-A} stands for @kbd{M-A}. You can use @samp{\M-} together with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 octal character codes (see below), with @samp{\C-}, or with any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 syntax for a character. Thus, you can write @kbd{M-A} as @samp{?\M-A},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 or as @samp{?\M-\101}. Likewise, you can write @kbd{C-M-b} as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 @samp{?\M-\C-b}, @samp{?\C-\M-b}, or @samp{?\M-\002}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 The case of an ordinary letter is indicated by its character code as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 part of @sc{ASCII}, but @sc{ASCII} has no way to represent whether a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 control character is upper case or lower case. Emacs uses the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 $2^{25}$
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 2**25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 bit to indicate that the shift key was used for typing a control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 character. This distinction is possible only when you use X terminals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 or other special terminals; ordinary terminals do not indicate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 distinction to the computer in any way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 @cindex hyper characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 @cindex super characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 @cindex alt characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 The X Window System defines three other modifier bits that can be set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 in a character: @dfn{hyper}, @dfn{super} and @dfn{alt}. The syntaxes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 for these bits are @samp{\H-}, @samp{\s-} and @samp{\A-}. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 @samp{?\H-\M-\A-x} represents @kbd{Alt-Hyper-Meta-x}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 Numerically, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 bit values are $2^{22}$ for alt, $2^{23}$ for super and $2^{24}$ for hyper.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 Numerically, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 @cindex @samp{?} in character constant
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 @cindex question mark in character constant
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 @cindex @samp{\} in character constant
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 @cindex backslash in character constant
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 @cindex octal character code
1549
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
612 @cindex hexadecimal character code
5247
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
613 @cindex Overlong hex character escape
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
614 @cindex Non-ISO-8859-1 octal character escape
3367
84ee3ca77e7f [xemacs-hg @ 2006-04-29 14:36:49 by aidan]
aidan
parents: 1549
diff changeset
615
1549
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
616 Finally, there are two read syntaxes involving character codes.
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
617 It is not possible to represent multibyte or wide characters in this
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
618 way; the permissible range of codes is from 0 to 255 (@emph{i.e.},
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
619 @samp{0377} octal or @samp{0xFF} hexadecimal). If you wish to convert
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
620 code points to other characters, you must use the @samp{make-char} or
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
621 @samp{unicode-to-char} primitives in Mule. (Non-Mule XEmacsen cannot
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
622 represent codes out of that range at all, although you can set the font
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
623 to a registry other than ISO 8859/1 to get the appearance of a greater
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
624 range of characters.) Although these syntaxes can represent any
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
625 @sc{ascii} or Latin-1 character, they are preferred only when the
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
626 precise integral value is more important than the @sc{ascii}
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
627 representation.
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
628
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
629 The first consists of a question mark
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 followed by a backslash and the character code in octal (up to three
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 octal digits); thus, @samp{?\101} for the character @kbd{A},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 @samp{?\001} for the character @kbd{C-a}, and @code{?\002} for the
4486
f9104f0e9b91 Document the error on over-long hex character constants.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4472
diff changeset
633 character @kbd{C-b}. The reader will finalize the character and start
f9104f0e9b91 Document the error on over-long hex character constants.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4472
diff changeset
634 reading the next token when a non-octal-digit is encountered or three
5247
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
635 octal digits are read. When a given character code is above
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
636 @code{#o377}, the Lisp reader signals an @code{invalid-read-syntax}
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
637 error. Such errors are typically provoked by code written for older
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
638 versions of GNU Emacs, where the absence of the #o octal syntax for
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
639 integers made the character syntax convenient for non-character
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
640 values. Those older versions of GNU Emacs are long obsolete, so
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
641 changing the code to use the #o integer escape is the best
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
642 solution. @pxref{Numbers}.
1549
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
643
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
644 The second consists of a question mark followed by a backslash, the
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
645 character @samp{x}, and the character code in hexadecimal (up to two
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
646 hexadecimal digits); thus, @samp{?\x41} for the character @kbd{A},
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
647 @samp{?\x1} for the character @kbd{C-a}, and @code{?\x2} for the
4486
f9104f0e9b91 Document the error on over-long hex character constants.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4472
diff changeset
648 character @kbd{C-b}. If more than two hexadecimal codes are given, the
5247
02d875ebd1ea Make Lisp reader errors more informative with over-long hex, octal characters
Aidan Kehoe <kehoea@parhasard.net>
parents: 4905
diff changeset
649 reader signals an @code{invalid-read-syntax} error.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 ;; @r{Under XEmacs 20:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 ?\012 @result{} ?\n ?\n @result{} ?\n ?\C-j @result{} ?\n
1549
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
655 ?\101 @result{} ?A ?A @result{} ?A ?\x0A @result{} ?\n
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
656 ?\x41 @result{} ?A '(?\xAZ) @result{} '(?\n Z) '(?\0123) @result{} (?\n 3)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 ;; @r{Under XEmacs 19:}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 ?\012 @result{} 10 ?\n @result{} 10 ?\C-j @result{} 10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 ?\101 @result{} 65 ?A @result{} 65
1549
bc9eadea35cf [xemacs-hg @ 2003-06-30 09:30:58 by stephent]
stephent
parents: 693
diff changeset
662 ;; ?\x41 @r{is a syntax error.}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 A backslash is allowed, and harmless, preceding any character without
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 a special escape meaning; thus, @samp{?\+} is equivalent to @samp{?+}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 There is no reason to add a backslash before most characters. However,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 you should add a backslash before any of the characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @samp{()\|;'`"#.,} to avoid confusing the Emacs commands for editing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 Lisp code. Also add a backslash before whitespace characters such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 space, tab, newline and formfeed. However, it is cleaner to use one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 the easily readable escape sequences, such as @samp{\t}, instead of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 actual whitespace character such as a tab.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 @node Symbol Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 @subsection Symbol Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 A @dfn{symbol} in XEmacs Lisp is an object with a name. The symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 name serves as the printed representation of the symbol. In ordinary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 use, the name is unique---no two symbols have the same name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 A symbol can serve as a variable, as a function name, or to hold a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 property list. Or it may serve only to be distinct from all other Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 objects, so that its presence in a data structure may be recognized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 reliably. In a given context, usually only one of these uses is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 intended. But you can use one symbol in all of these ways,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 independently.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 @cindex @samp{\} in symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 @cindex backslash in symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 A symbol name can contain any characters whatever. Most symbol names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 are written with letters, digits, and the punctuation characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 @samp{-+=*/}. Such names require no special punctuation; the characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 of the name suffice as long as the name does not look like a number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 (If it does, write a @samp{\} at the beginning of the name to force
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 interpretation as a symbol.) The characters @samp{_~!@@$%^&:<>@{@}} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 less often used but also require no special punctuation. Any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 characters may be included in a symbol's name by escaping them with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 backslash. In contrast to its use in strings, however, a backslash in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 the name of a symbol simply quotes the single character that follows the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 backslash. For example, in a string, @samp{\t} represents a tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 character; in the name of a symbol, however, @samp{\t} merely quotes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 letter @kbd{t}. To have a symbol with a tab character in its name, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 must actually use a tab (preceded with a backslash). But it's rare to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 do such a thing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 @cindex CL note---case of letters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 @quotation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 @b{Common Lisp note:} In Common Lisp, lower case letters are always
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 ``folded'' to upper case, unless they are explicitly escaped. In Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 Lisp, upper case and lower case letters are distinct.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 @end quotation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 Here are several examples of symbol names. Note that the @samp{+} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 the fifth example is escaped to prevent it from being read as a number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 This is not necessary in the sixth example because the rest of the name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 makes it invalid as a number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 foo ; @r{A symbol named @samp{foo}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 FOO ; @r{A symbol named @samp{FOO}, different from @samp{foo}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 char-to-string ; @r{A symbol named @samp{char-to-string}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 1+ ; @r{A symbol named @samp{1+}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 ; @r{(not @samp{+1}, which is an integer).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 \+1 ; @r{A symbol named @samp{+1}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 ; @r{(not a very readable name).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 \(*\ 1\ 2\) ; @r{A symbol named @samp{(* 1 2)} (a worse name).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 @c the @'s in this next line use up three characters, hence the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 @c apparent misalignment of the comment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 +-*/_~!@@$%^&=:<>@{@} ; @r{A symbol named @samp{+-*/_~!@@$%^&=:<>@{@}}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 ; @r{These characters need not be escaped.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 @node Sequence Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 @subsection Sequence Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 A @dfn{sequence} is a Lisp object that represents an ordered set of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 elements. There are two kinds of sequence in XEmacs Lisp, lists and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 arrays. Thus, an object of type list or of type array is also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 considered a sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 Arrays are further subdivided into strings, vectors, and bit vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 Vectors can hold elements of any type, but string elements must be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 characters, and bit vector elements must be either 0 or 1. However, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 characters in a string can have extents (@pxref{Extents}) and text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 properties (@pxref{Text Properties}) like characters in a buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 vectors do not support extents or text properties even when their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 elements happen to be characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 Lists, strings, vectors, and bit vectors are different, but they have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 important similarities. For example, all have a length @var{l}, and all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 have elements which can be indexed from zero to @var{l} minus one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 Also, several functions, called sequence functions, accept any kind of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 sequence. For example, the function @code{elt} can be used to extract
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 an element of a sequence, given its index. @xref{Sequences Arrays
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 Vectors}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 It is impossible to read the same sequence twice, since sequences are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 always created anew upon reading. If you read the read syntax for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 sequence twice, you get two sequences with equal contents. There is one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 exception: the empty list @code{()} always stands for the same object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 @node Cons Cell Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 @subsection Cons Cell and List Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 @cindex address field of register
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 @cindex decrement field of register
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 A @dfn{cons cell} is an object comprising two pointers named the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 @sc{car} and the @sc{cdr}. Each of them can point to any Lisp object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 A @dfn{list} is a series of cons cells, linked together so that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @sc{cdr} of each cons cell points either to another cons cell or to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 empty list. @xref{Lists}, for functions that work on lists. Because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 most cons cells are used as part of lists, the phrase @dfn{list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 structure} has come to refer to any structure made out of cons cells.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 The names @sc{car} and @sc{cdr} have only historical meaning now. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 original Lisp implementation ran on an @w{IBM 704} computer which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 divided words into two parts, called the ``address'' part and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 ``decrement''; @sc{car} was an instruction to extract the contents of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 the address part of a register, and @sc{cdr} an instruction to extract
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 the contents of the decrement. By contrast, ``cons cells'' are named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 for the function @code{cons} that creates them, which in turn is named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 for its purpose, the construction of cells.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 @cindex atom
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 Because cons cells are so central to Lisp, we also have a word for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 ``an object which is not a cons cell''. These objects are called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 @dfn{atoms}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 @cindex parenthesis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 The read syntax and printed representation for lists are identical, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 consist of a left parenthesis, an arbitrary number of elements, and a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 right parenthesis.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 Upon reading, each object inside the parentheses becomes an element
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 of the list. That is, a cons cell is made for each element. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @sc{car} of the cons cell points to the element, and its @sc{cdr} points
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 to the next cons cell of the list, which holds the next element in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 list. The @sc{cdr} of the last cons cell is set to point to @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 @cindex box diagrams, for lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 @cindex diagrams, boxed, for lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 A list can be illustrated by a diagram in which the cons cells are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 shown as pairs of boxes. (The Lisp reader cannot read such an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 illustration; unlike the textual notation, which can be understood by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 both humans and computers, the box illustrations can be understood only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 by humans.) The following represents the three-element list @code{(rose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 violet buttercup)}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 ___ ___ ___ ___ ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 |___|___|--> |___|___|--> |___|___|--> nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 --> rose --> violet --> buttercup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 In this diagram, each box represents a slot that can refer to any Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 object. Each pair of boxes represents a cons cell. Each arrow is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 reference to a Lisp object, either an atom or another cons cell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 In this example, the first box, the @sc{car} of the first cons cell,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 refers to or ``contains'' @code{rose} (a symbol). The second box, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 @sc{cdr} of the first cons cell, refers to the next pair of boxes, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 second cons cell. The @sc{car} of the second cons cell refers to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 @code{violet} and the @sc{cdr} refers to the third cons cell. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 @sc{cdr} of the third (and last) cons cell refers to @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 Here is another diagram of the same list, @code{(rose violet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 buttercup)}, sketched in a different manner:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 --------------- ---------------- -------------------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 | car | cdr | | car | cdr | | car | cdr |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 | rose | o-------->| violet | o-------->| buttercup | nil |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 --------------- ---------------- -------------------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 @cindex @samp{(@dots{})} in lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 @cindex @code{nil} in lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 @cindex empty list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 A list with no elements in it is the @dfn{empty list}; it is identical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 to the symbol @code{nil}. In other words, @code{nil} is both a symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 and a list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 Here are examples of lists written in Lisp syntax:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 (A 2 "A") ; @r{A list of three elements.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 () ; @r{A list of no elements (the empty list).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 nil ; @r{A list of no elements (the empty list).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 ("A ()") ; @r{A list of one element: the string @code{"A ()"}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 (A ()) ; @r{A list of two elements: @code{A} and the empty list.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 (A nil) ; @r{Equivalent to the previous.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 ((A B C)) ; @r{A list of one element}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 ; @r{(which is a list of three elements).}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 Here is the list @code{(A ())}, or equivalently @code{(A nil)},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 depicted with boxes and arrows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 ___ ___ ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 |___|___|--> |___|___|--> nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 --> A --> nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 * Dotted Pair Notation:: An alternative syntax for lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 * Association List Type:: A specially constructed list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 @node Dotted Pair Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 @subsubsection Dotted Pair Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 @cindex dotted pair notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 @cindex @samp{.} in lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 @dfn{Dotted pair notation} is an alternative syntax for cons cells
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 that represents the @sc{car} and @sc{cdr} explicitly. In this syntax,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 @code{(@var{a} .@: @var{b})} stands for a cons cell whose @sc{car} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 the object @var{a}, and whose @sc{cdr} is the object @var{b}. Dotted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 pair notation is therefore more general than list syntax. In the dotted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 pair notation, the list @samp{(1 2 3)} is written as @samp{(1 . (2 . (3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 . nil)))}. For @code{nil}-terminated lists, the two notations produce
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 the same result, but list notation is usually clearer and more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 convenient when it is applicable. When printing a list, the dotted pair
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 notation is only used if the @sc{cdr} of a cell is not a list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 Here's how box notation can illustrate dotted pairs. This example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 shows the pair @code{(rose . violet)}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 |___|___|--> violet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 --> rose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 Dotted pair notation can be combined with list notation to represent a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 chain of cons cells with a non-@code{nil} final @sc{cdr}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @code{(rose violet . buttercup)} is equivalent to @code{(rose . (violet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 . buttercup))}. The object looks like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 ___ ___ ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 |___|___|--> |___|___|--> buttercup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 --> rose --> violet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 These diagrams make it evident why @w{@code{(rose .@: violet .@:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 buttercup)}} is invalid syntax; it would require a cons cell that has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 three parts rather than two.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 The list @code{(rose violet)} is equivalent to @code{(rose . (violet))}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 and looks like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 ___ ___ ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 |___|___|--> |___|___|--> nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 --> rose --> violet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 Similarly, the three-element list @code{(rose violet buttercup)}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 is equivalent to @code{(rose . (violet . (buttercup)))}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 It looks like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 ___ ___ ___ ___ ___ ___
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 |___|___|--> |___|___|--> |___|___|--> nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 --> rose --> violet --> buttercup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 @node Association List Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 @subsubsection Association List Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 An @dfn{association list} or @dfn{alist} is a specially-constructed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 list whose elements are cons cells. In each element, the @sc{car} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 considered a @dfn{key}, and the @sc{cdr} is considered an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 @dfn{associated value}. (In some cases, the associated value is stored
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 in the @sc{car} of the @sc{cdr}.) Association lists are often used as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 stacks, since it is easy to add or remove associations at the front of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 (setq alist-of-colors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 '((rose . red) (lily . white) (buttercup . yellow)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 sets the variable @code{alist-of-colors} to an alist of three elements. In the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 first element, @code{rose} is the key and @code{red} is the value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 @xref{Association Lists}, for a further explanation of alists and for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 functions that work on alists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @node Array Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 @subsection Array Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 An @dfn{array} is composed of an arbitrary number of slots for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 referring to other Lisp objects, arranged in a contiguous block of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 memory. Accessing any element of an array takes the same amount of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 time. In contrast, accessing an element of a list requires time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 proportional to the position of the element in the list. (Elements at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 the end of a list take longer to access than elements at the beginning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 of a list.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 XEmacs defines three types of array, strings, vectors, and bit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 vectors. A string is an array of characters, a vector is an array of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 arbitrary objects, and a bit vector is an array of 1's and 0's. All are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 one-dimensional. (Most other programming languages support
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 multidimensional arrays, but they are not essential; you can get the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 same effect with an array of arrays.) Each type of array has its own
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 read syntax; see @ref{String Type}, @ref{Vector Type}, and @ref{Bit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 Vector Type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
1015 An array may have any length up to the largest fixnum; but once
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 created, it has a fixed size. The first element of an array has index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 zero, the second element has index 1, and so on. This is called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 @dfn{zero-origin} indexing. For example, an array of four elements has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 indices 0, 1, 2, @w{and 3}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 The array type is contained in the sequence type and contains the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 string type, the vector type, and the bit vector type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 @node String Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @subsection String Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 A @dfn{string} is an array of characters. Strings are used for many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 purposes in XEmacs, as can be expected in a text editor; for example, as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 the names of Lisp symbols, as messages for the user, and to represent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 text extracted from buffers. Strings in Lisp are constants: evaluation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 of a string returns the same string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 @cindex @samp{"} in strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 @cindex double-quote in strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 @cindex @samp{\} in strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 @cindex backslash in strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 The read syntax for strings is a double-quote, an arbitrary number of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 characters, and another double-quote, @code{"like this"}. The Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 reader accepts the same formats for reading the characters of a string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 as it does for reading single characters (without the question mark that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 begins a character literal). You can enter a nonprinting character such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 as tab or @kbd{C-a} using the convenient escape sequences, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 @code{"\t, \C-a"}. You can include a double-quote in a string by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 preceding it with a backslash; thus, @code{"\""} is a string containing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 just a single double-quote character. (@xref{Character Type}, for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 description of the read syntax for characters.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @ignore @c More ill-conceived FSF Emacs crap.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 If you use the @samp{\M-} syntax to indicate a meta character in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 string constant, this sets the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 $2^{7}$
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 2**7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 bit of the character in the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 This is not the same representation that the meta modifier has in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 character on its own (not inside a string). @xref{Character Type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 Strings cannot hold characters that have the hyper, super, or alt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 modifiers; they can hold @sc{ASCII} control characters, but no others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 They do not distinguish case in @sc{ASCII} control characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 The printed representation of a string consists of a double-quote, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 characters it contains, and another double-quote. However, you must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 escape any backslash or double-quote characters in the string with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 backslash, like this: @code{"this \" is an embedded quote"}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1071 An alternative syntax allows insertion of raw backslashes into a
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1072 string, like this: @code{#r"this \ is an embedded backslash"}. In such
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1073 a string, each character following a backslash is included literally in
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1074 the string, and all backslashes are left in the string. This means that
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1075 @code{#r"\""} is a valid string literal with two characters, a backslash and a
4265
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1076 double-quote. It also means that a string with this syntax cannot end
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1077 in a single backslash. As with Python, from where this syntax was
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1078 taken, you can specify @code{u} or @code{U} after the @code{#r} to
4265
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1079 specify that interpretation of Unicode escapes should be
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1080 done---@pxref{Character Type}---and if you use @code{#ru} for your raw
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1081 strings, the restriction on the trailing backslash can be worked around
dc697b1b786f [xemacs-hg @ 2007-11-14 18:20:41 by aidan]
aidan
parents: 3543
diff changeset
1082 like so: @code{#ru"Backslash: \u005C"}.
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 3367
diff changeset
1083
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 The newline character is not special in the read syntax for strings;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 if you write a new line between the double-quotes, it becomes a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 character in the string. But an escaped newline---one that is preceded
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 by @samp{\}---does not become part of the string; i.e., the Lisp reader
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 ignores an escaped newline while reading a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 @cindex newline in strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 "It is useful to include newlines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 in documentation strings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 but the newline is \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 ignored if escaped."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 @result{} "It is useful to include newlines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 in documentation strings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 but the newline is ignored if escaped."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 A string can hold extents and properties of the text it contains, in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 addition to the characters themselves. This enables programs that copy
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 text between strings and buffers to preserve the extents and properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 with no special effort. @xref{Extents}, @xref{Text Properties}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 Note that FSF GNU Emacs has a special read and print syntax for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 strings with text properties, but XEmacs does not currently implement
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 this. It was judged better not to include this in XEmacs because it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 entails that @code{equal} return @code{nil} when passed a string with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 text properties and the equivalent string without text properties, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 is often counter-intuitive.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @ignore @c Not in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 Strings with text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 properties have a special read and print syntax:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 #("@var{characters}" @var{property-data}...)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 where @var{property-data} consists of zero or more elements, in groups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 of three as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 @example
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 440
diff changeset
1126 @var{start} @var{end} @var{plist}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 @noindent
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 440
diff changeset
1130 The elements @var{start} and @var{end} are integers, and together specify
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 a range of indices in the string; @var{plist} is the property list for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 that range.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 @xref{Strings and Characters}, for functions that work on strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 @node Vector Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @subsection Vector Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 A @dfn{vector} is a one-dimensional array of elements of any type. It
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 takes a constant amount of time to access any element of a vector. (In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 a list, the access time of an element is proportional to the distance of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 the element from the beginning of the list.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 The printed representation of a vector consists of a left square
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 bracket, the elements, and a right square bracket. This is also the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 read syntax. Like numbers and strings, vectors are considered constants
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 for evaluation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 [1 "two" (three)] ; @r{A vector of three elements.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @result{} [1 "two" (three)]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 @xref{Vectors}, for functions that work with vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 @node Bit Vector Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 @subsection Bit Vector Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 A @dfn{bit vector} is a one-dimensional array of 1's and 0's. It
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 takes a constant amount of time to access any element of a bit vector,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 as for vectors. Bit vectors have an extremely compact internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 representation (one machine bit per element), which makes them ideal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 for keeping track of unordered sets, large collections of boolean values,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 The printed representation of a bit vector consists of @samp{#*}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 followed by the bits in the vector. This is also the read syntax. Like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 numbers, strings, and vectors, bit vectors are considered constants for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 evaluation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 #*00101000 ; @r{A bit vector of eight elements.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @result{} #*00101000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 @xref{Bit Vectors}, for functions that work with bit vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 @node Function Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 @subsection Function Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 Just as functions in other programming languages are executable,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 @dfn{Lisp function} objects are pieces of executable code. However,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 functions in Lisp are primarily Lisp objects, and only secondarily the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 text which represents them. These Lisp objects are lambda expressions:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 lists whose first element is the symbol @code{lambda} (@pxref{Lambda
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 Expressions}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 In most programming languages, it is impossible to have a function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 without a name. In Lisp, a function has no intrinsic name. A lambda
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 expression is also called an @dfn{anonymous function} (@pxref{Anonymous
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 Functions}). A named function in Lisp is actually a symbol with a valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 function in its function cell (@pxref{Defining Functions}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 Most of the time, functions are called when their names are written in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 Lisp expressions in Lisp programs. However, you can construct or obtain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 a function object at run time and then call it with the primitive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 functions @code{funcall} and @code{apply}. @xref{Calling Functions}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 @node Macro Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 @subsection Macro Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 language. It is represented as an object much like a function, but with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 different parameter-passing semantics. A Lisp macro has the form of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 list whose first element is the symbol @code{macro} and whose @sc{cdr}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 is a Lisp function object, including the @code{lambda} symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 Lisp macro objects are usually defined with the built-in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 @code{defmacro} function, but any list that begins with @code{macro} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 a macro as far as XEmacs is concerned. @xref{Macros}, for an explanation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 of how to write a macro.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 @node Primitive Function Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 @subsection Primitive Function Type
4905
755ae5b97edb Change "special form" to "special operator" in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4885
diff changeset
1216 @cindex special operators
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 A @dfn{primitive function} is a function callable from Lisp but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 written in the C programming language. Primitive functions are also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 called @dfn{subrs} or @dfn{built-in functions}. (The word ``subr'' is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 derived from ``subroutine''.) Most primitive functions evaluate all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 their arguments when they are called. A primitive function that does
4905
755ae5b97edb Change "special form" to "special operator" in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4885
diff changeset
1223 not evaluate all its arguments is called a @dfn{special operator}
755ae5b97edb Change "special form" to "special operator" in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4885
diff changeset
1224 (@pxref{Special Operators}).@refill
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 It does not matter to the caller of a function whether the function is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 primitive. However, this does matter if you try to substitute a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 function written in Lisp for a primitive of the same name. The reason
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 is that the primitive function may be called directly from C code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 Calls to the redefined function from Lisp will use the new definition,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 but calls from C code may still use the built-in definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 The term @dfn{function} refers to all Emacs functions, whether written
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 in Lisp or C. @xref{Function Type}, for information about the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 functions written in Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 Primitive functions have no read syntax and print in hash notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 with the name of the subroutine.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 (symbol-function 'car) ; @r{Access the function cell}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 ; @r{of the symbol.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @result{} #<subr car>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 (subrp (symbol-function 'car)) ; @r{Is this a primitive function?}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 @result{} t ; @r{Yes.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 @node Compiled-Function Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 @subsection Compiled-Function Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 The byte compiler produces @dfn{compiled-function objects}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 evaluator handles this data type specially when it appears as a function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 to be called. @xref{Byte Compilation}, for information about the byte
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 compiler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 The printed representation for a compiled-function object is normally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 @samp{#<compiled-function...>}. If @code{print-readably} is true,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 however, it is @samp{#[...]}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 @node Autoload Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 @subsection Autoload Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 An @dfn{autoload object} is a list whose first element is the symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 @code{autoload}. It is stored as the function definition of a symbol as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 a placeholder for the real definition; it says that the real definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 is found in a file of Lisp code that should be loaded when necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 The autoload object contains the name of the file, plus some other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 information about the real definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 After the file has been loaded, the symbol should have a new function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 definition that is not an autoload object. The new definition is then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 called as if it had been there to begin with. From the user's point of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 view, the function call works as expected, using the function definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 in the loaded file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 An autoload object is usually created with the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 @code{autoload}, which stores the object in the function cell of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 symbol. @xref{Autoload}, for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 @node Char Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 @subsection Char Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 @cindex char table type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 @node Hash Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 @subsection Hash Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 @cindex hash table type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 A @dfn{hash table} is a table providing an arbitrary mapping from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 one Lisp object to another, using an internal indexing method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 called @dfn{hashing}. Hash tables are very fast (much more efficient
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 that using an association list, when there are a large number of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 elements in the table).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 Hash tables have a special read syntax beginning with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 @samp{#s(hash-table} (this is an example of @dfn{structure} read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 syntax. This notation is also used for printing when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 @code{print-readably} is @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 Otherwise they print in hash notation (The ``hash'' in ``hash notation''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 has nothing to do with the ``hash'' in ``hash table''), giving the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 number of elements, total space allocated for elements, and a unique
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 number assigned at the time the hash table was created. (Hash tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 automatically resize as necessary so there is no danger of running out
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 of space for elements.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 (make-hash-table :size 50)
4820
e6dec75ded0e Use keywords, not ordinary symbols, in the structure syntax for hash tables.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4792
diff changeset
1313 @result{} #<hash-table :size 0/107 0x3babb0e4>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 @xref{Hash Tables}, for information on how to create and work with hash
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 @node Range Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 @subsection Range Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 @cindex range table type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
1324 A @dfn{range table} is a table that maps from ranges of fixnums to
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 arbitrary Lisp objects. Range tables automatically combine overlapping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 ranges that map to the same Lisp object, and operations are provided
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 for mapping over all of the ranges in a range table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 Range tables have a special read syntax beginning with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 @samp{#s(range-table} (this is an example of @dfn{structure} read syntax,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 which is also used for char tables and faces).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 (setq x (make-range-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 (put-range-table 20 50 'foo x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 (put-range-table 100 200 "bar" x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 @result{} #s(range-table data ((20 50) foo (100 200) "bar"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 @xref{Range Tables}, for information on how to create and work with range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 @node Weak List Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 @subsection Weak List Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 @cindex weak list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 @node Editing Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 @section Editing Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 @cindex editing types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 The types in the previous section are common to many Lisp dialects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 XEmacs Lisp provides several additional data types for purposes connected
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 with editing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 * Buffer Type:: The basic object of editing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 * Marker Type:: A position in a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 * Extent Type:: A range in a buffer or string, maybe with properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 * Window Type:: Buffers are displayed in windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 * Frame Type:: Windows subdivide frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 * Device Type:: Devices group all frames on a display.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 * Console Type:: Consoles group all devices with the same keyboard.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 * Window Configuration Type:: Recording the way a frame is subdivided.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 * Event Type:: An interesting occurrence in the system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 * Process Type:: A process running on the underlying OS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 * Stream Type:: Receive or send characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 * Keymap Type:: What function a keystroke invokes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 * Syntax Table Type:: What a character means.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 * Display Table Type:: How display tables are represented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 * Database Type:: A connection to an external DBM or DB database.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 * Charset Type:: A character set (e.g. all Kanji characters),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 under XEmacs/MULE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 * Coding System Type:: An object encapsulating a way of converting between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 different textual encodings, under XEmacs/MULE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 * ToolTalk Message Type:: A message, in the ToolTalk IPC protocol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 * ToolTalk Pattern Type:: A pattern, in the ToolTalk IPC protocol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 @node Buffer Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 @subsection Buffer Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 A @dfn{buffer} is an object that holds text that can be edited
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 (@pxref{Buffers}). Most buffers hold the contents of a disk file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 (@pxref{Files}) so they can be edited, but some are used for other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 purposes. Most buffers are also meant to be seen by the user, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 therefore displayed, at some time, in a window (@pxref{Windows}). But a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 buffer need not be displayed in any window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 The contents of a buffer are much like a string, but buffers are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 used like strings in XEmacs Lisp, and the available operations are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 different. For example, insertion of text into a buffer is very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 efficient, whereas ``inserting'' text into a string requires
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 concatenating substrings, and the result is an entirely new string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 Each buffer has a designated position called @dfn{point}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 (@pxref{Positions}). At any time, one buffer is the @dfn{current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 buffer}. Most editing commands act on the contents of the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 buffer in the neighborhood of point. Many of the standard Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 functions manipulate or test the characters in the current buffer; a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 whole chapter in this manual is devoted to describing these functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 (@pxref{Text}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 Several other data structures are associated with each buffer:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 a local syntax table (@pxref{Syntax Tables});
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 a local keymap (@pxref{Keymaps});
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 a local variable binding list (@pxref{Buffer-Local Variables});
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 a list of extents (@pxref{Extents});
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 and various other related properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 The local keymap and variable list contain entries that individually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 override global bindings or values. These are used to customize the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 behavior of programs in different buffers, without actually changing the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 programs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 A buffer may be @dfn{indirect}, which means it shares the text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 of another buffer. @xref{Indirect Buffers}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 Buffers have no read syntax. They print in hash notation, showing the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 buffer name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 (current-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 @result{} #<buffer "objects.texi">
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 @node Marker Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 @subsection Marker Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 A @dfn{marker} denotes a position in a specific buffer. Markers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 therefore have two components: one for the buffer, and one for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 position. Changes in the buffer's text automatically relocate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 position value as necessary to ensure that the marker always points
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 between the same two characters in the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 Markers have no read syntax. They print in hash notation, giving the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 current character position and the name of the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 (point-marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 @result{} #<marker at 50661 in objects.texi>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 @xref{Markers}, for information on how to test, create, copy, and move
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 markers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 @node Extent Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 @subsection Extent Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 An @dfn{extent} specifies temporary alteration of the display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 appearance of a part of a buffer (or string). It contains markers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 delimiting a range of the buffer, plus a property list (a list whose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 elements are alternating property names and values). Extents are used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 to present parts of the buffer temporarily in a different display style.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 They have no read syntax, and print in hash notation, giving the buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 name and range of positions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 Extents can exist over strings as well as buffers; the primary use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 of this is to preserve extent and text property information as text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 is copied from one buffer to another or between different parts of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 Extents have no read syntax. They print in hash notation, giving the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 range of text they cover, the name of the buffer or string they are in,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 the address in core, and a summary of some of the properties attached to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 the extent.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 (extent-at (point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 @result{} #<extent [51742, 51748) font-lock text-prop 0x90121e0 in buffer objects.texi>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 @xref{Extents}, for how to create and use extents.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 Extents are used to implement text properties. @xref{Text Properties}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 @node Window Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 @subsection Window Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 A @dfn{window} describes the portion of the frame that XEmacs uses to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 display a buffer. (In standard window-system usage, a @dfn{window} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 what XEmacs calls a @dfn{frame}; XEmacs confusingly uses the term
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 ``window'' to refer to what is called a @dfn{pane} in standard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 window-system usage.) Every window has one associated buffer, whose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 contents appear in the window. By contrast, a given buffer may appear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 in one window, no window, or several windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 Though many windows may exist simultaneously, at any time one window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 is designated the @dfn{selected window}. This is the window where the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 cursor is (usually) displayed when XEmacs is ready for a command. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 selected window usually displays the current buffer, but this is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 necessarily the case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 Windows are grouped on the screen into frames; each window belongs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 one and only one frame. @xref{Frame Type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 Windows have no read syntax. They print in hash notation, giving the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 name of the buffer being displayed and a unique number assigned at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 time the window was created. (This number can be useful because the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 buffer displayed in any given window can change frequently.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 (selected-window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 @result{} #<window on "objects.texi" 0x266c>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 @xref{Windows}, for a description of the functions that work on windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 @node Frame Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 @subsection Frame Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 A @var{frame} is a rectangle on the screen (a @dfn{window} in standard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 window-system terminology) that contains one or more non-overlapping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 Emacs windows (@dfn{panes} in standard window-system terminology). A
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 frame initially contains a single main window (plus perhaps a minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 window) which you can subdivide vertically or horizontally into smaller
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 Frames have no read syntax. They print in hash notation, giving the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 frame's type, name as used for resourcing, and a unique number assigned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 at the time the frame was created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 (selected-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 @result{} #<x-frame "emacs" 0x9db>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 @xref{Frames}, for a description of the functions that work on frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 @node Device Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 @subsection Device Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 A @dfn{device} represents a single display on which frames exist.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 Normally, there is only one device object, but there may be more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 than one if XEmacs is being run on a multi-headed display (e.g. an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 X server with attached color and mono screens) or if XEmacs is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 simultaneously driving frames attached to different consoles, e.g.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 an X display and a @sc{tty} connection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 Devices do not have a read syntax. They print in hash notation,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 giving the device's type, connection name, and a unique number assigned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 at the time the device was created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 (selected-device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 @result{} #<x-device on ":0.0" 0x5b9>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 @xref{Consoles and Devices}, for a description of several functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 related to devices.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 @node Console Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 @subsection Console Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 A @dfn{console} represents a single keyboard to which devices
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 (i.e. displays on which frames exist) are connected. Normally, there is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 only one console object, but there may be more than one if XEmacs is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 simultaneously driving frames attached to different X servers and/or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 @sc{tty} connections. (XEmacs is capable of driving multiple X and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 @sc{tty} connections at the same time, and provides a robust mechanism
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 for handling the differing display capabilities of such heterogeneous
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 environments. A buffer with embedded glyphs and multiple fonts and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 colors, for example, will display reasonably if it simultaneously
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 appears on a frame on a color X display, a frame on a mono X display,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 and a frame on a @sc{tty} connection.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 Consoles do not have a read syntax. They print in hash notation,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 giving the console's type, connection name, and a unique number assigned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 at the time the console was created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 (selected-console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 @result{} #<x-console on "localhost:0" 0x5b7>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 @xref{Consoles and Devices}, for a description of several functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 related to consoles.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 @node Window Configuration Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 @subsection Window Configuration Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 @cindex screen layout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 A @dfn{window configuration} stores information about the positions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 sizes, and contents of the windows in a frame, so you can recreate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 same arrangement of windows later.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 Window configurations do not have a read syntax. They print in hash
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 notation, giving a unique number assigned at the time the window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 configuration was created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 (current-window-configuration)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 @result{} #<window-configuration 0x2db4>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 @xref{Window Configurations}, for a description of several functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 related to window configurations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 @node Event Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 @subsection Event Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 @node Process Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 @subsection Process Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 The word @dfn{process} usually means a running program. XEmacs itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 runs in a process of this sort. However, in XEmacs Lisp, a process is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 Lisp object that designates a subprocess created by the XEmacs process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 Programs such as shells, GDB, ftp, and compilers, running in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 subprocesses of XEmacs, extend the capabilities of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 An Emacs subprocess takes textual input from Emacs and returns textual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 output to Emacs for further manipulation. Emacs can also send signals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 to the subprocess.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 Process objects have no read syntax. They print in hash notation,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 giving the name of the process, its associated process ID, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 current state of the process:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 (process-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 @result{} (#<process "shell" pid 2909 state:run>)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 @xref{Processes}, for information about functions that create, delete,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 return information about, send input or signals to, and receive output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 from processes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 @node Stream Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 @subsection Stream Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 A @dfn{stream} is an object that can be used as a source or sink for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 characters---either to supply characters for input or to accept them as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 output. Many different types can be used this way: markers, buffers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 strings, and functions. Most often, input streams (character sources)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 obtain characters from the keyboard, a buffer, or a file, and output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 streams (character sinks) send characters to a buffer, such as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 @file{*Help*} buffer, or to the echo area.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 The object @code{nil}, in addition to its other meanings, may be used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 as a stream. It stands for the value of the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 @code{standard-input} or @code{standard-output}. Also, the object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 @code{t} as a stream specifies input using the minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 (@pxref{Minibuffers}) or output in the echo area (@pxref{The Echo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 Area}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 Streams have no special printed representation or read syntax, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 print as whatever primitive type they are.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 @xref{Read and Print}, for a description of functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 related to streams, including parsing and printing functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 @node Keymap Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 @subsection Keymap Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 A @dfn{keymap} maps keys typed by the user to commands. This mapping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 controls how the user's command input is executed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 NOTE: In XEmacs, a keymap is a separate primitive type. In FSF GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 Emacs, a keymap is actually a list whose @sc{car} is the symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 @code{keymap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 @xref{Keymaps}, for information about creating keymaps, handling prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 keys, local as well as global keymaps, and changing key bindings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 @node Syntax Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 @subsection Syntax Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 Under XEmacs 20, a @dfn{syntax table} is a particular type of char
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
1707 table. Under XEmacs 19, a syntax table is a vector of 256 integers. In
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 both cases, each element defines how one character is interpreted when it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 appears in a buffer. For example, in C mode (@pxref{Major Modes}), the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 @samp{+} character is punctuation, but in Lisp mode it is a valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 character in a symbol. These modes specify different interpretations by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 changing the syntax table entry for @samp{+}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 Syntax tables are used only for scanning text in buffers, not for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 reading Lisp expressions. The table the Lisp interpreter uses to read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 expressions is built into the XEmacs source code and cannot be changed;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 thus, to change the list delimiters to be @samp{@{} and @samp{@}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 instead of @samp{(} and @samp{)} would be impossible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 @xref{Syntax Tables}, for details about syntax classes and how to make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 and modify syntax tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 @node Display Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 @subsection Display Table Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 A @dfn{display table} specifies how to display each character code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 Each buffer and each window can have its own display table. A display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 table is actually a vector of length 256, although in XEmacs 20 this may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 change to be a particular type of char table. @xref{Display Tables}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 @node Database Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 @subsection Database Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 @cindex database type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 @node Charset Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 @subsection Charset Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 @cindex charset type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 @node Coding System Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 @subsection Coding System Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 @cindex coding system type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 @node ToolTalk Message Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 @subsection ToolTalk Message Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 @node ToolTalk Pattern Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 @subsection ToolTalk Pattern Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 @node Window-System Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 @section Window-System Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 @cindex window system types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 XEmacs also has some types that represent objects such as faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 (collections of display characters), fonts, and pixmaps that are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 commonly found in windowing systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 * Face Type:: A collection of display characteristics.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 * Glyph Type:: An image appearing in a buffer or elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 * Specifier Type:: A way of controlling display characteristics on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 a per-buffer, -frame, -window, or -device level.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 * Font Instance Type:: The way a font appears on a particular device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 * Color Instance Type:: The way a color appears on a particular device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 * Image Instance Type:: The way an image appears on a particular device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 * Toolbar Button Type:: An object representing a button in a toolbar.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 * Subwindow Type:: An externally-controlled window-system window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 appearing in a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 * X Resource Type:: A miscellaneous X resource, if Epoch support was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 compiled into XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 @node Face Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 @subsection Face Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 @cindex face type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 @node Glyph Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 @subsection Glyph Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 @cindex glyph type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 @node Specifier Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 @subsection Specifier Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 @cindex specifier type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 @node Font Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 @subsection Font Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 @cindex font instance type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 @node Color Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 @subsection Color Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 @cindex color instance type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 @node Image Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 @subsection Image Instance Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 @cindex image instance type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 @node Toolbar Button Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 @subsection Toolbar Button Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 @cindex toolbar button type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 @node Subwindow Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 @subsection Subwindow Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 @cindex subwindow type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 @node X Resource Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 @subsection X Resource Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 @cindex X resource type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 @node Type Predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 @section Type Predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 @cindex predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 @cindex type checking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 @kindex wrong-type-argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 The XEmacs Lisp interpreter itself does not perform type checking on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 the actual arguments passed to functions when they are called. It could
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 not do so, since function arguments in Lisp do not have declared data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 types, as they do in other programming languages. It is therefore up to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 the individual function to test whether each actual argument belongs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 a type that the function can use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 All built-in functions do check the types of their actual arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 when appropriate, and signal a @code{wrong-type-argument} error if an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 argument is of the wrong type. For example, here is what happens if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 pass an argument to @code{+} that it cannot handle:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 (+ 2 'a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 @error{} Wrong type argument: integer-or-marker-p, a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 @cindex type predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 @cindex testing types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 If you want your program to handle different types differently, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 must do explicit type checking. The most common way to check the type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 of an object is to call a @dfn{type predicate} function. Emacs has a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 type predicate for each type, as well as some predicates for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 combinations of types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 A type predicate function takes one argument; it returns @code{t} if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 the argument belongs to the appropriate type, and @code{nil} otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 Following a general Lisp convention for predicate functions, most type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 predicates' names end with @samp{p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 Here is an example which uses the predicates @code{listp} to check for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 a list and @code{symbolp} to check for a symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 (defun add-on (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 (cond ((symbolp x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 ;; If X is a symbol, put it on LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 (setq list (cons x list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 ((listp x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 ;; If X is a list, add its elements to LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 (setq list (append x list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 @need 3000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 ;; We only handle symbols and lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 (error "Invalid argument %s in add-on" x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 Here is a table of predefined type predicates, in alphabetical order,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 with references to further information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 @item annotationp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 @xref{Annotation Primitives, annotationp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 @item arrayp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 @xref{Array Functions, arrayp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 @item atom
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 @xref{List-related Predicates, atom}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 @item bit-vector-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 @xref{Bit Vector Functions, bit-vector-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 @item bitp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 @xref{Bit Vector Functions, bitp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 @item boolean-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 @xref{Specifier Types, boolean-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 @item buffer-glyph-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 @xref{Glyph Types, buffer-glyph-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 @item buffer-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 @xref{Killing Buffers, buffer-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 @item bufferp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 @xref{Buffer Basics, bufferp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 @item button-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 @xref{Event Predicates, button-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 @item button-press-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 @xref{Event Predicates, button-press-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 @item button-release-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 @xref{Event Predicates, button-release-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 @item case-table-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 @xref{Case Tables, case-table-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 @item char-int-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 @xref{Character Codes, char-int-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 @item char-or-char-int-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 @xref{Character Codes, char-or-char-int-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 @item char-or-string-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 @xref{Predicates for Strings, char-or-string-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 @item char-table-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 @xref{Char Tables, char-table-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 @item characterp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 @xref{Predicates for Characters, characterp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 @item color-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 @xref{Colors, color-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 @item color-pixmap-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 @xref{Image Instance Types, color-pixmap-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 @item color-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 @xref{Specifier Types, color-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 @item commandp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 @xref{Interactive Call, commandp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 @item compiled-function-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 @xref{Compiled-Function Type, compiled-function-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 @item console-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 @xref{Connecting to a Console or Device, console-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 @item consolep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 @xref{Consoles and Devices, consolep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 @item consp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 @xref{List-related Predicates, consp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 @item database-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 @xref{Connecting to a Database, database-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 @item databasep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 @xref{Databases, databasep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 @item device-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 @xref{Connecting to a Console or Device, device-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 @item device-or-frame-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 @xref{Basic Device Functions, device-or-frame-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 @item devicep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 @xref{Consoles and Devices, devicep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 @item eval-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 @xref{Event Predicates, eval-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 @item event-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 @xref{Event Predicates, event-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 @item eventp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 @xref{Events, eventp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 @item extent-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 @xref{Creating and Modifying Extents, extent-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 @item extentp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 @xref{Extents, extentp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 @item face-boolean-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 @xref{Specifier Types, face-boolean-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 @item facep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 @xref{Basic Face Functions, facep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 @item floatp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 @xref{Predicates on Numbers, floatp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 @item font-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 @xref{Fonts, font-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 @item font-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 @xref{Specifier Types, font-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 @item frame-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 @xref{Deleting Frames, frame-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 @item framep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 @xref{Frames, framep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 @item functionp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027 @item generic-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 @xref{Specifier Types, generic-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 @item glyphp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 @xref{Glyphs, glyphp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 @item hash-table-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 @xref{Hash Tables, hash-table-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 @item icon-glyph-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 @xref{Glyph Types, icon-glyph-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 @item image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 @xref{Images, image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 @item image-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 @xref{Specifier Types, image-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 @item integer-char-or-marker-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 @xref{Predicates on Markers, integer-char-or-marker-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 @item integer-or-char-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 @xref{Predicates for Characters, integer-or-char-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 @item integer-or-marker-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 @xref{Predicates on Markers, integer-or-marker-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 @item integer-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 @xref{Specifier Types, integer-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 @item integerp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 @xref{Predicates on Numbers, integerp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 @item itimerp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 @item key-press-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 @xref{Event Predicates, key-press-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 @item keymapp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 @xref{Creating Keymaps, keymapp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 @item keywordp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 @item listp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 @xref{List-related Predicates, listp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 @item markerp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 @xref{Predicates on Markers, markerp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 @item misc-user-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 @xref{Event Predicates, misc-user-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 @item mono-pixmap-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 @xref{Image Instance Types, mono-pixmap-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 @item motion-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 @xref{Event Predicates, motion-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 @item mouse-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 @xref{Event Predicates, mouse-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 @item natnum-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 @xref{Specifier Types, natnum-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 @item natnump
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 @xref{Predicates on Numbers, natnump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 @item nlistp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 @xref{List-related Predicates, nlistp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 @item nothing-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 @xref{Image Instance Types, nothing-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102 @item number-char-or-marker-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 @xref{Predicates on Markers, number-char-or-marker-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 @item number-or-marker-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2106 @xref{Predicates on Markers, number-or-marker-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 @item numberp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2109 @xref{Predicates on Numbers, numberp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 @item pointer-glyph-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 @xref{Glyph Types, pointer-glyph-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 @item pointer-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 @xref{Image Instance Types, pointer-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117 @item process-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118 @xref{Event Predicates, process-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120 @item processp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 @xref{Processes, processp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 @item range-table-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 @xref{Range Tables, range-table-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 @item ringp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 (not yet documented)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 @item sequencep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 @xref{Sequence Functions, sequencep}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132 @item specifierp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 @xref{Specifiers, specifierp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 @item stringp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 @xref{Predicates for Strings, stringp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 @item subrp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 @xref{Function Cells, subrp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 @item subwindow-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 @xref{Image Instance Types, subwindow-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 @item subwindowp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 @xref{Subwindows, subwindowp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 @item symbolp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 @xref{Symbols, symbolp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 @item syntax-table-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 @xref{Syntax Tables, syntax-table-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 @item text-image-instance-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 @xref{Image Instance Types, text-image-instance-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 @item timeout-event-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 @xref{Event Predicates, timeout-event-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 @item toolbar-button-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 @xref{Toolbar, toolbar-button-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 @item toolbar-specifier-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 @xref{Toolbar, toolbar-specifier-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 @item user-variable-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 @xref{Defining Variables, user-variable-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 @item vectorp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 @xref{Vectors, vectorp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 @item weak-list-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172 @xref{Weak Lists, weak-list-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2174 @ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175 @item wholenump
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 @xref{Predicates on Numbers, wholenump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 @item window-configuration-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 @xref{Window Configurations, window-configuration-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182 @item window-live-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 @xref{Deleting Windows, window-live-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 @item windowp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 @xref{Basic Windows, windowp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 The most general way to check the type of an object is to call the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190 function @code{type-of}. Recall that each object belongs to one and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191 only one primitive type; @code{type-of} tells you which one (@pxref{Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2192 Data Types}). But @code{type-of} knows nothing about non-primitive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 types. In most cases, it is more convenient to use type predicates than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 @code{type-of}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 @defun type-of object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 This function returns a symbol naming the primitive type of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 @var{object}. The value is one of @code{bit-vector}, @code{buffer},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 @code{char-table}, @code{character}, @code{charset},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 @code{coding-system}, @code{cons}, @code{color-instance},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201 @code{compiled-function}, @code{console}, @code{database},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202 @code{device}, @code{event}, @code{extent}, @code{face}, @code{float},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 @code{font-instance}, @code{frame}, @code{glyph}, @code{hash-table},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 @code{image-instance}, @code{integer}, @code{keymap}, @code{marker},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205 @code{process}, @code{range-table}, @code{specifier}, @code{string},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 @code{subr}, @code{subwindow}, @code{symbol}, @code{toolbar-button},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207 @code{tooltalk-message}, @code{tooltalk-pattern}, @code{vector},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208 @code{weak-list}, @code{window}, @code{window-configuration}, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209 @code{x-resource}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 (type-of 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 @result{} integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 (type-of 'nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215 @result{} symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 (type-of '()) ; @r{@code{()} is @code{nil}.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 @result{} symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 (type-of '(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219 @result{} cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 @node Equality Predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 @section Equality Predicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 @cindex equality
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226
5359
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2227 Here we describe functions that test for equality between any two
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228 objects. Other functions test equality between objects of specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 types, e.g., strings. For these predicates, see the appropriate chapter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 describing the data type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232 @defun eq object1 object2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 This function returns @code{t} if @var{object1} and @var{object2} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 the same object, @code{nil} otherwise. The ``same object'' means that a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 change in one will be reflected by the same change in the other.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 @code{eq} returns @code{t} if @var{object1} and @var{object2} are
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4820
diff changeset
2238 fixnums with the same value. It is preferable to use @code{=} or
4472
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2239 @code{eql} in many contexts for numeric comparison, especially since
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2240 bignums (integers with values that would have otherwise overflowed, only
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2241 available on some builds) with the same value are not @code{eq};
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2242 @pxref{Comparison of Numbers}. @code{eq} also returns @code{t} if
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2243 @var{object1} and @var{object2} are identical characters, though in this
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2244 case you may prefer to use @code{char=}.
4471
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2245
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2246 Also, since symbol names are normally unique, if the arguments are
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2247 symbols with the same name, they are @code{eq}. For other types (e.g.,
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2248 lists, vectors, strings), two arguments with the same contents or
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2249 elements are not necessarily @code{eq} to each other: they are @code{eq}
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2250 only if they are the same object.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252 (The @code{make-symbol} function returns an uninterned symbol that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253 not interned in the standard @code{obarray}. When uninterned symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 are in use, symbol names are no longer unique. Distinct symbols with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 the same name are not @code{eq}. @xref{Creating Symbols}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 NOTE: Under XEmacs 19, characters are really just integers, and thus
4472
a99eb40f0b5b Correct an omitted word, expand on bignum equality in the lispref.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4471
diff changeset
2258 characters and integers with the same numeric code are @code{eq}. Under
4471
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2259 XEmacs 20, it was necessary to preserve remnants of this in function
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2260 such as @code{old-eq} in order to maintain byte-code compatibility.
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2261 Byte code compiled under any Emacs 19 will automatically have calls to
2d39535e1f9d Say explicitly that eq is useful for chars; xref number comparison, lispref
Aidan Kehoe <kehoea@parhasard.net>
parents: 4265
diff changeset
2262 @code{eq} mapped to @code{old-eq} when executed under XEmacs 20.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 (eq 'foo 'foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 (eq 456 456)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 (eq "asdf" "asdf")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 (eq '(1 (2 (3))) '(1 (2 (3))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 (setq foo '(1 (2 (3))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 @result{} (1 (2 (3)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 (eq foo foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 (eq foo '(1 (2 (3))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 (eq [(1 2) 3] [(1 2) 3])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300 (eq (point-marker) (point-marker))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2301 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2303 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2305 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2306
5359
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2307 @defun eql object1 object2
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2308
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2309 This function returns @code{t} if the two arguments are the same object,
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2310 as with @code{eq}. In addition, it returns @code{t} if @var{object1}
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2311 and @var{object2} are numeric objects of the same type and with equal
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2312 values. Otherwise it returns @code{nil}. @code{eql} is the default
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2313 test for hash tables, and for many sequence-oriented functions inherited
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2314 from Common Lisp.
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2315
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2316 @example
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2317 @group
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2318 (eql 1 1)
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2319 @result{} t
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2320 (eql 1 1.0) ; different types
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2321 @result{} nil
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2322 (eq (+ 0.0 pi) pi)
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2323 @result{} nil ; in some contexts can be t, but don't rely on this!
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2324 (eql (+ 0.0 pi) pi)
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2325 @result{} t ; this is more reliable.
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2326 (position (+ 0 pi) (list 0 1 2 pi 4))
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2327 @result{} 3 ; function's test defaults to eql
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2328 @end group
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2329 @end example
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2330 @end defun
f5a5501814f5 Document the CL set functions and #'eql in the Lispref, not just cl.texi
Aidan Kehoe <kehoea@parhasard.net>
parents: 5247
diff changeset
2331
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 @defun equal object1 object2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 This function returns @code{t} if @var{object1} and @var{object2} have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 equal components, @code{nil} otherwise. Whereas @code{eq} tests if its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 arguments are the same object, @code{equal} looks inside nonidentical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336 arguments to see if their elements are the same. So, if two objects are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 @code{eq}, they are @code{equal}, but the converse is not always true.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 (equal 'foo 'foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 (equal 456 456)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2351 (equal "asdf" "asdf")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355 (eq "asdf" "asdf")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 (equal '(1 (2 (3))) '(1 (2 (3))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 (eq '(1 (2 (3))) '(1 (2 (3))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2366 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 (equal [(1 2) 3] [(1 2) 3])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 (eq [(1 2) 3] [(1 2) 3])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 (equal (point-marker) (point-marker))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 (eq (point-marker) (point-marker))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 Comparison of strings is case-sensitive.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 Note that in FSF GNU Emacs, comparison of strings takes into account
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 their text properties, and you have to use @code{string-equal} if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392 want only the strings themselves compared. This difference does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 exist in XEmacs; @code{equal} and @code{string-equal} always return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 the same value on the same strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396 @ignore @c Not true in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 Comparison of strings is case-sensitive and takes account of text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 properties as well as the characters in the strings. To compare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 two strings' characters without comparing their text properties,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 use @code{string=} (@pxref{Text Comparison}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 (equal "asdf" "ASDF")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 Two distinct buffers are never @code{equal}, even if their contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 are the same.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 The test for equality is implemented recursively, and circular lists may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 therefore cause infinite recursion (leading to an error).
4792
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2416
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2417 @defun equalp object1 object2
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2418 This function is like @code{equal}, but compares characters and strings
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2419 case-insensitively; numbers are compared using @code{=}; arrays (that
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2420 is, strings, bit-vectors and vectors) are regarded as being
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2421 @code{equalp} if their contents are @code{equalp}; and
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2422 @code{hash-tables} are @code{equalp} if their values are @code{equalp}
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2423 and they would otherwise be @code{equal}.
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2424
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2425 @code{equalp} is recursive with vectors, lists and hash-tables, but not
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2426 with other complex types. For types without a defined @code{equalp}
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2427 behavior, @code{equalp} behaves as @code{equal} does.
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2428
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2429 @example
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2430 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2431 (equalp "asdf" "ASDF")
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2432 @result{} t
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2433 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2434 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2435 (equalp "asdf" [?a ?s ?D ?F])
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2436 @result{} t
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2437 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2438 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2439 (equalp "asdf" [?a ?s ?D ?F ?g])
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2440 @result{} nil
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2441 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2442 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2443 (equalp "" (bit-vector))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2444 @result{} t
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2445 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2446 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2447 (equalp #s(hash-table) (make-hash-table))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2448 @result{} t
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2449 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2450 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2451 (equalp #s(hash-table data (t "hi there"))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2452 (let ((ht (make-hash-table)))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2453 (puthash t "HI THERE" ht)
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2454 ht))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2455 @result{} t
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2456 @group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2457 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2458 (equalp #s(hash-table test eq data (1.0 "hi there"))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2459 (let ((ht (make-hash-table :test 'eql)))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2460 (puthash 1.0 "HI THERE" ht)
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2461 ht))
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2462 @result{} nil
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2463 @end group
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2464 @end example
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2465 @end defun
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2466
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2467 @code{equalp} can also provoke an error if handed a circular structure,
95b04754ea8c Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4486
diff changeset
2468 as with @code{equal}.