comparison lispref/lists.texi @ 60040:24dd4b5475b4

(List-related Predicates): Minor wording improvement. (Lists as Boxes): Node deleted. (Building Lists): Explain trivial cases of number-sequence.
author Richard M. Stallman <rms@gnu.org>
date Mon, 14 Feb 2005 10:14:29 +0000
parents c9aa4127a482
children ce7d7b779c21
comparison
equal deleted inserted replaced
60039:d1e57e5b8403 60040:24dd4b5475b4
84 cells. 84 cells.
85 85
86 The @sc{cdr} of any nonempty list @var{l} is a list containing all the 86 The @sc{cdr} of any nonempty list @var{l} is a list containing all the
87 elements of @var{l} except the first. 87 elements of @var{l} except the first.
88 88
89 @node Lists as Boxes
90 @comment node-name, next, previous, up
91 @section Lists as Linked Pairs of Boxes
92 @cindex box representation for lists
93 @cindex lists represented as boxes
94 @cindex cons cell as box
95
96 A cons cell can be illustrated as a pair of boxes. The first box
97 represents the @sc{car} and the second box represents the @sc{cdr}.
98 Here is an illustration of the two-element list, @code{(tulip lily)},
99 made from two cons cells:
100
101 @example
102 @group
103 --------------- ---------------
104 | car | cdr | | car | cdr |
105 | tulip | o---------->| lily | nil |
106 | | | | | |
107 --------------- ---------------
108 @end group
109 @end example
110
111 Each pair of boxes represents a cons cell. Each box ``refers to'',
112 ``points to'' or ``holds'' a Lisp object. (These terms are
113 synonymous.) The first box, which describes the @sc{car} of the first
114 cons cell, contains the symbol @code{tulip}. The arrow from the
115 @sc{cdr} box of the first cons cell to the second cons cell indicates
116 that the @sc{cdr} of the first cons cell is the second cons cell.
117
118 The same list can be illustrated in a different sort of box notation
119 like this:
120
121 @example
122 @group
123 --- --- --- ---
124 | | |--> | | |--> nil
125 --- --- --- ---
126 | |
127 | |
128 --> tulip --> lily
129 @end group
130 @end example
131
132 Here is a more complex illustration, showing the three-element list,
133 @code{((pine needles) oak maple)}, the first element of which is a
134 two-element list:
135
136 @example
137 @group
138 --- --- --- --- --- ---
139 | | |--> | | |--> | | |--> nil
140 --- --- --- --- --- ---
141 | | |
142 | | |
143 | --> oak --> maple
144 |
145 | --- --- --- ---
146 --> | | |--> | | |--> nil
147 --- --- --- ---
148 | |
149 | |
150 --> pine --> needles
151 @end group
152 @end example
153
154 The same list represented in the first box notation looks like this:
155
156 @example
157 @group
158 -------------- -------------- --------------
159 | car | cdr | | car | cdr | | car | cdr |
160 | o | o------->| oak | o------->| maple | nil |
161 | | | | | | | | | |
162 -- | --------- -------------- --------------
163 |
164 |
165 | -------------- ----------------
166 | | car | cdr | | car | cdr |
167 ------>| pine | o------->| needles | nil |
168 | | | | | |
169 -------------- ----------------
170 @end group
171 @end example
172
173 @xref{Cons Cell Type}, for the read and print syntax of cons cells and 89 @xref{Cons Cell Type}, for the read and print syntax of cons cells and
174 lists, and for more ``box and arrow'' illustrations of lists. 90 lists, and for more ``box and arrow'' illustrations of lists.
175 91
176 @node List-related Predicates 92 @node List-related Predicates
177 @section Predicates on Lists 93 @section Predicates on Lists
178 94
179 The following predicates test whether a Lisp object is an atom, is a 95 The following predicates test whether a Lisp object is an atom,
180 cons cell or is a list, or whether it is the distinguished object 96 whether it is a cons cell or is a list, or whether it is the
181 @code{nil}. (Many of these predicates can be defined in terms of the 97 distinguished object @code{nil}. (Many of these predicates can be
182 others, but they are used so often that it is worth having all of them.) 98 defined in terms of the others, but they are used so often that it is
99 worth having all of them.)
183 100
184 @defun consp object 101 @defun consp object
185 This function returns @code{t} if @var{object} is a cons cell, @code{nil} 102 This function returns @code{t} if @var{object} is a cons cell, @code{nil}
186 otherwise. @code{nil} is not a cons cell, although it @emph{is} a list. 103 otherwise. @code{nil} is not a cons cell, although it @emph{is} a list.
187 @end defun 104 @end defun
747 @defun number-sequence from &optional to separation 664 @defun number-sequence from &optional to separation
748 This returns a list of numbers starting with @var{from} and 665 This returns a list of numbers starting with @var{from} and
749 incrementing by @var{separation}, and ending at or just before 666 incrementing by @var{separation}, and ending at or just before
750 @var{to}. @var{separation} can be positive or negative and defaults 667 @var{to}. @var{separation} can be positive or negative and defaults
751 to 1. If @var{to} is @code{nil} or numerically equal to @var{from}, 668 to 1. If @var{to} is @code{nil} or numerically equal to @var{from},
752 the one element list @code{(from)} is returned. If @var{separation} 669 the value is the one-element list @code{(@var{from})}. If @var{to} is
753 is 0 and @var{to} is neither @code{nil} nor numerically equal to 670 less than @var{from} with a positive @var{separation}, or greater than
754 @var{from}, an error is signaled. 671 @var{from} with a negative @var{separation}, the value is @code{nil}
672 because those arguments specify an empty sequence.
673
674 If @var{separation} is 0 and @var{to} is neither @code{nil} nor
675 numerically equal to @var{from}, @code{number-sequence} signals an
676 error, since those arguments specify an infinite sequence.
755 677
756 All arguments can be integers or floating point numbers. However, 678 All arguments can be integers or floating point numbers. However,
757 floating point arguments can be tricky, because floating point 679 floating point arguments can be tricky, because floating point
758 arithmetic is inexact. For instance, depending on the machine, it may 680 arithmetic is inexact. For instance, depending on the machine, it may
759 quite well happen that @code{(number-sequence 0.4 0.6 0.2)} returns 681 quite well happen that @code{(number-sequence 0.4 0.6 0.2)} returns