annotate lispref/symbols.texi @ 18989:6253a99afd95

(rmail-pop-password-error): New variable. (rmail-insert-inbox-text): If there's an error getting mail from the POP server, and the error matches rmail-pop-password-error or we prompted for the POP password, assume that the password is incorrect and erase it so that the user will be prompted again the next time he gets mail.
author Richard M. Stallman <rms@gnu.org>
date Fri, 25 Jul 1997 22:08:24 +0000
parents 586e3ea81792
children 66d807bdc5b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 @c See the file elisp.texi for copying conditions.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @setfilename ../info/symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @node Symbols, Evaluation, Sequences Arrays Vectors, Top
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @chapter Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @cindex symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 A @dfn{symbol} is an object with a unique name. This chapter
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 describes symbols, their components, their property lists, and how they
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 are created and interned. Separate chapters describe the use of symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 as variables and as function names; see @ref{Variables}, and
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 @ref{Functions}. For the precise read syntax for symbols, see
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 @ref{Symbol Type}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You can test whether an arbitrary Lisp object is a symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 with @code{symbolp}:
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 @defun symbolp object
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 This function returns @code{t} if @var{object} is a symbol, @code{nil}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 otherwise.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 @menu
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * Symbol Components:: Symbols have names, values, function definitions
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 and property lists.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 * Definitions:: A definition says how a symbol will be used.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 * Creating Symbols:: How symbols are kept unique.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 * Property Lists:: Each symbol has a property list
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 for recording miscellaneous information.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 @end menu
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 @node Symbol Components, Definitions, Symbols, Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 @section Symbol Components
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 @cindex symbol components
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 Each symbol has four components (or ``cells''), each of which
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 references another object:
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 @table @asis
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 @item Print name
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 @cindex print name cell
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
44 The @dfn{print name cell} holds a string that names the symbol for
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 reading and printing. See @code{symbol-name} in @ref{Creating Symbols}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 @item Value
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 @cindex value cell
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 The @dfn{value cell} holds the current value of the symbol as a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 variable. When a symbol is used as a form, the value of the form is the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 contents of the symbol's value cell. See @code{symbol-value} in
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 @ref{Accessing Variables}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 @item Function
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 @cindex function cell
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 The @dfn{function cell} holds the function definition of the symbol.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 When a symbol is used as a function, its function definition is used in
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 its place. This cell is also used to make a symbol stand for a keymap
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 or a keyboard macro, for editor command execution. Because each symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 has separate value and function cells, variables and function names do
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 not conflict. See @code{symbol-function} in @ref{Function Cells}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 @item Property list
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 @cindex property list cell
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 The @dfn{property list cell} holds the property list of the symbol. See
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 @code{symbol-plist} in @ref{Property Lists}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 @end table
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 The print name cell always holds a string, and cannot be changed. The
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 other three cells can be set individually to any specified Lisp object.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 The print name cell holds the string that is the name of the symbol.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 Since symbols are represented textually by their names, it is important
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 not to have two symbols with the same name. The Lisp reader ensures
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 this: every time it reads a symbol, it looks for an existing symbol with
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 the specified name before it creates a new one. (In GNU Emacs Lisp,
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 this lookup uses a hashing algorithm and an obarray; see @ref{Creating
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 Symbols}.)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 In normal usage, the function cell usually contains a function or
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 macro, as that is what the Lisp interpreter expects to see there
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 (@pxref{Evaluation}). Keyboard macros (@pxref{Keyboard Macros}),
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 keymaps (@pxref{Keymaps}) and autoload objects (@pxref{Autoloading}) are
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 also sometimes stored in the function cell of symbols. We often refer
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 to ``the function @code{foo}'' when we really mean the function stored
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 in the function cell of the symbol @code{foo}. We make the distinction
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 only when necessary.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 The property list cell normally should hold a correctly formatted
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 property list (@pxref{Property Lists}), as a number of functions expect
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 to see a property list there.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 The function cell or the value cell may be @dfn{void}, which means
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 that the cell does not reference any object. (This is not the same
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 thing as holding the symbol @code{void}, nor the same as holding the
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
96 symbol @code{nil}.) Examining a cell that is void results in an error,
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 such as @samp{Symbol's value as variable is void}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 The four functions @code{symbol-name}, @code{symbol-value},
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 @code{symbol-plist}, and @code{symbol-function} return the contents of
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 the four cells of a symbol. Here as an example we show the contents of
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 the four cells of the symbol @code{buffer-file-name}:
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 @example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 (symbol-name 'buffer-file-name)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 @result{} "buffer-file-name"
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 (symbol-value 'buffer-file-name)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 @result{} "/gnu/elisp/symbols.texi"
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (symbol-plist 'buffer-file-name)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 @result{} (variable-documentation 29529)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (symbol-function 'buffer-file-name)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 @result{} #<subr buffer-file-name>
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 @end example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 @noindent
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 Because this symbol is the variable which holds the name of the file
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 being visited in the current buffer, the value cell contents we see are
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 the name of the source file of this chapter of the Emacs Lisp Manual.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 The property list cell contains the list @code{(variable-documentation
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 29529)} which tells the documentation functions where to find the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 documentation string for the variable @code{buffer-file-name} in the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 @file{DOC} file. (29529 is the offset from the beginning of the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 @file{DOC} file to where that documentation string begins.) The
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 function cell contains the function for returning the name of the file.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 @code{buffer-file-name} names a primitive function, which has no read
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 syntax and prints in hash notation (@pxref{Primitive Function Type}). A
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 symbol naming a function written in Lisp would have a lambda expression
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (or a byte-code object) in this cell.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 @node Definitions, Creating Symbols, Symbol Components, Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 @section Defining Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 @cindex definition of a symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 A @dfn{definition} in Lisp is a special form that announces your
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 intention to use a certain symbol in a particular way. In Emacs Lisp,
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 you can define a symbol as a variable, or define it as a function (or
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 macro), or both independently.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 A definition construct typically specifies a value or meaning for the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 symbol for one kind of use, plus documentation for its meaning when used
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 in this way. Thus, when you define a symbol as a variable, you can
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 supply an initial value for the variable, plus documentation for the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 variable.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 @code{defvar} and @code{defconst} are special forms that define a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 symbol as a global variable. They are documented in detail in
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 @ref{Defining Variables}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 @code{defun} defines a symbol as a function, creating a lambda
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 expression and storing it in the function cell of the symbol. This
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 lambda expression thus becomes the function definition of the symbol.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (The term ``function definition'', meaning the contents of the function
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 cell, is derived from the idea that @code{defun} gives the symbol its
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
154 definition as a function.) @code{defsubst} and @code{defalias} are two
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
155 other ways of defining a function. @xref{Functions}.
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 @code{defmacro} defines a symbol as a macro. It creates a macro
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 object and stores it in the function cell of the symbol. Note that a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 given symbol can be a macro or a function, but not both at once, because
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 both macro and function definitions are kept in the function cell, and
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 that cell can hold only one Lisp object at any given time.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 @xref{Macros}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
164 In Emacs Lisp, a definition is not required in order to use a symbol
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
165 as a variable or function. Thus, you can make a symbol a global
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 variable with @code{setq}, whether you define it first or not. The real
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 purpose of definitions is to guide programmers and programming tools.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 They inform programmers who read the code that certain symbols are
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 @emph{intended} to be used as variables, or as functions. In addition,
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 utilities such as @file{etags} and @file{make-docfile} recognize
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 definitions, and add appropriate information to tag tables and the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 @file{emacs/etc/DOC-@var{version}} file. @xref{Accessing Documentation}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 @node Creating Symbols, Property Lists, Definitions, Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 @section Creating and Interning Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 @cindex reading symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 To understand how symbols are created in GNU Emacs Lisp, you must know
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 how Lisp reads them. Lisp must ensure that it finds the same symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 every time it reads the same set of characters. Failure to do so would
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 cause complete confusion.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 @cindex symbol name hashing
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 @cindex hashing
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 @cindex obarray
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 @cindex bucket (in obarray)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 When the Lisp reader encounters a symbol, it reads all the characters
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 of the name. Then it ``hashes'' those characters to find an index in a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 table called an @dfn{obarray}. Hashing is an efficient method of
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 looking something up. For example, instead of searching a telephone
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 book cover to cover when looking up Jan Jones, you start with the J's
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 and go from there. That is a simple version of hashing. Each element
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 of the obarray is a @dfn{bucket} which holds all the symbols with a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 given hash code; to look for a given name, it is sufficient to look
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 through all the symbols in the bucket for that name's hash code.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 @cindex interning
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
198 If a symbol with the desired name is found, the reader uses that
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
199 symbol. If the obarray does not contain a symbol with that name, the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
200 reader makes a new symbol and adds it to the obarray. Finding or adding
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
201 a symbol with a certain name is called @dfn{interning} it, and the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
202 symbol is then called an @dfn{interned symbol}.
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
203
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
204 Interning ensures that each obarray has just one symbol with any
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
205 particular name. Other like-named symbols may exist, but not in the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
206 same obarray. Thus, the reader gets the same symbols for the same
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
207 names, as long as you keep reading with the same obarray.
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 @cindex symbol equality
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 @cindex uninterned symbol
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
211 No obarray contains all symbols; in fact, some symbols are not in any
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
212 obarray. They are called @dfn{uninterned symbols}. An uninterned
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
213 symbol has the same four cells as other symbols; however, the only way
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
214 to gain access to it is by finding it in some other object or as the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
215 value of a variable.
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 In Emacs Lisp, an obarray is actually a vector. Each element of the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 vector is a bucket; its value is either an interned symbol whose name
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 hashes to that bucket, or 0 if the bucket is empty. Each interned
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 symbol has an internal link (invisible to the user) to the next symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 in the bucket. Because these links are invisible, there is no way to
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 find all the symbols in an obarray except using @code{mapatoms} (below).
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 The order of symbols in a bucket is not significant.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 In an empty obarray, every element is 0, and you can create an obarray
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 with @code{(make-vector @var{length} 0)}. @strong{This is the only
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 valid way to create an obarray.} Prime numbers as lengths tend
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 to result in good hashing; lengths one less than a power of two are also
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 good.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 @strong{Do not try to put symbols in an obarray yourself.} This does
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 not work---only @code{intern} can enter a symbol in an obarray properly.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 @strong{Do not try to intern one symbol in two obarrays.} This would
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 garble both obarrays, because a symbol has just one slot to hold the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 following symbol in the obarray bucket. The results would be
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 unpredictable.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 It is possible for two different symbols to have the same name in
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 different obarrays; these symbols are not @code{eq} or @code{equal}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 However, this normally happens only as part of the abbrev mechanism
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (@pxref{Abbrevs}).
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 @cindex CL note---symbol in obarrays
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 @quotation
7734
2d4db32cccd5 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7118
diff changeset
245 @b{Common Lisp note:} In Common Lisp, a single symbol may be interned in
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 several obarrays.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 @end quotation
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 Most of the functions below take a name and sometimes an obarray as
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 arguments. A @code{wrong-type-argument} error is signaled if the name
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 is not a string, or if the obarray is not a vector.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 @defun symbol-name symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 This function returns the string that is @var{symbol}'s name. For example:
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 @example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 @group
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (symbol-name 'foo)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 @result{} "foo"
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 @end group
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 @end example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 Changing the string by substituting characters, etc, does change the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 name of the symbol, but fails to update the obarray, so don't do it!
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 @defun make-symbol name
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 This function returns a newly-allocated, uninterned symbol whose name is
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 @var{name} (which must be a string). Its value and function definition
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 are void, and its property list is @code{nil}. In the example below,
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 the value of @code{sym} is not @code{eq} to @code{foo} because it is a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 distinct uninterned symbol whose name is also @samp{foo}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 @example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (setq sym (make-symbol "foo"))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 @result{} foo
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (eq sym 'foo)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @result{} nil
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 @end example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 @defun intern name &optional obarray
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 This function returns the interned symbol whose name is @var{name}. If
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 there is no such symbol in the obarray @var{obarray}, @code{intern}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 creates a new one, adds it to the obarray, and returns it. If
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 @var{obarray} is omitted, the value of the global variable
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 @code{obarray} is used.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 @example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (setq sym (intern "foo"))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 @result{} foo
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (eq sym 'foo)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 @result{} t
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (setq sym1 (intern "foo" other-obarray))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 @result{} foo
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (eq sym 'foo)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 @result{} nil
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 @end example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 @defun intern-soft name &optional obarray
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 This function returns the symbol in @var{obarray} whose name is
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 @var{name}, or @code{nil} if @var{obarray} has no symbol with that name.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 Therefore, you can use @code{intern-soft} to test whether a symbol with
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 a given name is already interned. If @var{obarray} is omitted, the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 value of the global variable @code{obarray} is used.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 @smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (intern-soft "frazzle") ; @r{No such symbol exists.}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 @result{} nil
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (make-symbol "frazzle") ; @r{Create an uninterned one.}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 @result{} frazzle
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
314 @group
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (intern-soft "frazzle") ; @r{That one cannot be found.}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 @result{} nil
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
317 @end group
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
318 @group
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (setq sym (intern "frazzle")) ; @r{Create an interned one.}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 @result{} frazzle
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
321 @end group
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
322 @group
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (intern-soft "frazzle") ; @r{That one can be found!}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @result{} frazzle
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12128
diff changeset
325 @end group
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 @group
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 (eq sym 'frazzle) ; @r{And it is the same one.}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 @result{} t
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 @end group
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 @end smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 @defvar obarray
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 This variable is the standard obarray for use by @code{intern} and
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 @code{read}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 @end defvar
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 @defun mapatoms function &optional obarray
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
339 This function calls @var{function} for each symbol in the obarray
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 @var{obarray}. It returns @code{nil}. If @var{obarray} is omitted, it
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 defaults to the value of @code{obarray}, the standard obarray for
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ordinary symbols.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 @smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (setq count 0)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 @result{} 0
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (defun count-syms (s)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (setq count (1+ count)))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 @result{} count-syms
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (mapatoms 'count-syms)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 @result{} nil
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 count
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 @result{} 1871
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 @end smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 See @code{documentation} in @ref{Accessing Documentation}, for another
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 example using @code{mapatoms}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
360 @defun unintern symbol &optional obarray
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
361 This function deletes @var{symbol} from the obarray @var{obarray}. If
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
362 @code{symbol} is not actually in the obarray, @code{unintern} does
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
363 nothing. If @var{obarray} is @code{nil}, the current obarray is used.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
364
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
365 If you provide a string instead of a symbol as @var{symbol}, it stands
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
366 for a symbol name. Then @code{unintern} deletes the symbol (if any) in
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
367 the obarray which has that name. If there is no such symbol,
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
368 @code{unintern} does nothing.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
369
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
370 If @code{unintern} does delete a symbol, it returns @code{t}. Otherwise
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
371 it returns @code{nil}.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
372 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
373
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 @node Property Lists,, Creating Symbols, Symbols
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 @section Property Lists
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 @cindex property list
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 @cindex plist
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 A @dfn{property list} (@dfn{plist} for short) is a list of paired
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 elements stored in the property list cell of a symbol. Each of the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 pairs associates a property name (usually a symbol) with a property or
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 value. Property lists are generally used to record information about a
7118
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
383 symbol, such as its documentation as a variable, the name of the file
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
384 where it was defined, or perhaps even the grammatical class of the
08d61ef58d13 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6411
diff changeset
385 symbol (representing a word) in a language-understanding system.
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 Character positions in a string or buffer can also have property lists.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 @xref{Text Properties}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 The property names and values in a property list can be any Lisp
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 objects, but the names are usually symbols. They are compared using
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 @code{eq}. Here is an example of a property list, found on the symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 @code{progn} when the compiler is loaded:
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (lisp-indent-function 0 byte-compile byte-compile-progn)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 @end example
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 @noindent
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 Here @code{lisp-indent-function} and @code{byte-compile} are property
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 names, and the other two elements are the corresponding values.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
403 @menu
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
404 * Plists and Alists:: Comparison of the advantages of property
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
405 lists and association lists.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
406 * Symbol Plists:: Functions to access symbols' property lists.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
407 * Other Plists:: Accessing property lists stored elsewhere.
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
408 @end menu
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
409
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
410 @node Plists and Alists
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
411 @subsection Property Lists and Association Lists
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
412
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 @cindex property lists vs association lists
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 Association lists (@pxref{Association Lists}) are very similar to
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 property lists. In contrast to association lists, the order of the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 pairs in the property list is not significant since the property names
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 must be distinct.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 Property lists are better than association lists for attaching
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 information to various Lisp function names or variables. If all the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 associations are recorded in one association list, the program will need
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 to search that entire list each time a function or variable is to be
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 operated on. By contrast, if the information is recorded in the
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 property lists of the function names or variables themselves, each
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 search will scan only the length of one property list, which is usually
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 short. This is why the documentation for a variable is recorded in a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 property named @code{variable-documentation}. The byte compiler
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 likewise uses properties to record those functions needing special
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 treatment.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 However, association lists have their own advantages. Depending on
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 your application, it may be faster to add an association to the front of
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 an association list than to update a property. All properties for a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 symbol are stored in the same property list, so there is a possibility
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 of a conflict between different uses of a property name. (For this
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 reason, it is a good idea to choose property names that are probably
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 unique, such as by including the name of the library in the property
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 name.) An association list may be used like a stack where associations
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 are pushed on the front of the list and later discarded; this is not
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 possible with a property list.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
442 @node Symbol Plists
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
443 @subsection Property List Functions for Symbols
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
444
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 @defun symbol-plist symbol
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 This function returns the property list of @var{symbol}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 @defun setplist symbol plist
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
450 This function sets @var{symbol}'s property list to @var{plist}.
6411
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 Normally, @var{plist} should be a well-formed property list, but this is
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 not enforced.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 @smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 (setplist 'foo '(a 1 b (2 3) c nil))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 @result{} (a 1 b (2 3) c nil)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (symbol-plist 'foo)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 @result{} (a 1 b (2 3) c nil)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 @end smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 For symbols in special obarrays, which are not used for ordinary
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 purposes, it may make sense to use the property list cell in a
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 nonstandard fashion; in fact, the abbrev mechanism does so
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 (@pxref{Abbrevs}).
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 @defun get symbol property
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 This function finds the value of the property named @var{property} in
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 @var{symbol}'s property list. If there is no such property, @code{nil}
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 is returned. Thus, there is no distinction between a value of
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 @code{nil} and the absence of the property.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 The name @var{property} is compared with the existing property names
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 using @code{eq}, so any object is a legitimate property.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 See @code{put} for an example.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 @end defun
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 @defun put symbol property value
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 This function puts @var{value} onto @var{symbol}'s property list under
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 the property name @var{property}, replacing any previous property value.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 The @code{put} function returns @var{value}.
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 @smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (put 'fly 'verb 'transitive)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 @result{}'transitive
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (put 'fly 'noun '(a buzzing little bug))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 @result{} (a buzzing little bug)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (get 'fly 'verb)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 @result{} transitive
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 (symbol-plist 'fly)
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 @result{} (verb transitive noun (a buzzing little bug))
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 @end smallexample
aea7be7b925c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 @end defun
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
495
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
496 @node Other Plists
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
497 @subsection Property Lists Outside Symbols
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
498
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
499 These two functions are useful for manipulating property lists
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
500 that are stored in places other than symbols:
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
501
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
502 @defun plist-get plist property
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
503 This returns the value of the @var{property} property
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
504 stored in the property list @var{plist}. For example,
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
505
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
506 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
507 (plist-get '(foo 4) 'foo)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
508 @result{} 4
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
509 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
510 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
511
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
512 @defun plist-put plist property value
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
513 This stores @var{value} as the value of the @var{property} property in
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
514 the property list @var{plist}. It may modify @var{plist} destructively,
12128
27144f55d1c6 fixed errors that appeared during update to 19.29.
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
515 or it may construct a new list structure without altering the old. The
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
516 function returns the modified property list, so you can store that back
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
517 in the place where you got @var{plist}. For example,
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
518
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
519 @example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
520 (setq my-plist '(bar t foo 4))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
521 @result{} (bar t foo 4)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
522 (setq my-plist (plist-put my-plist 'foo 69))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
523 @result{} (bar t foo 69)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
524 (setq my-plist (plist-put my-plist 'quux '(a)))
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
525 @result{} (quux (a) bar t foo 5)
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
526 @end example
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
527 @end defun
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 7734
diff changeset
528