Added a few lines on lambda list keywords
[clqr.git] / clqr-control-structure.tex
blob8f388fb9705113e83cd01047e07e4814a4fed946
1 % Copyright (C) 2008, 2009 Bert Burgemeister
3 % Permission is granted to copy, distribute and/or modify this
4 % document under the terms of the GNU Free Documentation License,
5 % Version 1.2 or any later version published by the Free Software
6 % Foundation; with no Invariant Sections, no Front-Cover Texts and
7 % no Back-Cover Texts. For details see file COPYING.
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11 \section{Control Structure}
12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15 \subsection{Predicates}
16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17 \begin{LIST}{1cm}
19 \IT{(\FU*{EQ} \VAR{foo bar})}
21 \retval{\T} if \VAR{foo} and \VAR{bar} are identical.
24 \IT{(\FU*{EQL} \VAR{foo bar})}
26 \retval{\T} if \VAR{foo} and \VAR{bar}
27 are identical, or the same \kwd{character}, or \kwd{number}s of the
28 same type and value.
31 \IT{(\FU*{EQUAL} \VAR{foo bar})}
33 \retval{\T} if \VAR{foo} and \VAR{bar}
34 are \FU{EQL}, or are equivalent \kwd{pathname}s, or are \kwd{cons}es with
35 \FU{equal} cars and cdrs, or are \kwd{string}s or \kwd{bit-vector}s with
36 \FU{eql} elements below their fill pointers.
39 \IT{(\FU*{EQUALP} \VAR{foo bar})}
41 \retval{\T} if \VAR{foo} and \VAR{bar} are identical; or are the
42 same \kwd{character} ignoring case; or are \kwd{number}s of the same
43 value ignoring type; or are equivalent \kwd{pathname}s; or are
44 \kwd{cons}es or \kwd{array}s of the same shape with \FU{equalp}
45 elements; or are structures of the same type with
46 \kwd{equalp} elements; or are \kwd{hash-table}s of the same size
47 with the same \kwd{:test} function, the same keys in terms of
48 \kwd{:test} function, and \kwd{equalp} elements.
51 \IT{(\FU*{NOT} \VAR{foo})}
53 \retval{\T} if \VAR{foo} is \NIL, \retval{\NIL} otherwise.
56 \IT{(\FU*{BOUNDP} \VAR{symbol})}
58 \retval{\T} if \VAR{symbol} is a special variable.
61 \IT{(\FU*{CONSTANTP} \VAR{foo} \Op{\VAR{environment}\DF{\NIL}})}
63 \retval{\T} if \VAR{foo} is a constant form.
66 \IT{(\FU*{FUNCTIONP} \VAR{foo})}
68 \retval{\T} if \VAR{foo} is of type \kwd{function}.
71 \IT{(\FU*{FBOUNDP} \xorGOO{\VAR{foo}\\
72 (\kwd{setf } \VAR{foo})}{\}})}
74 \retval{\T} if \VAR{foo} is a global function or macro.
78 \end{LIST}
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 \subsection{Variables}
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 \begin{LIST}{1cm}
87 \IT{(\xorGOO{%
88 \MC*{DEFCONSTANT}\\
89 \MC*{DEFPARAMETER}}{\}} \NEV{\VAR{foo}} \VAR{form}
90 \Op{\NEV{\VAR{doc}}})}
92 Assign value of \VAR{form} to global constant/dynamic variable \retval{\VAR{foo}}.
95 \IT{(\MC*{DEFVAR} \NEV{\VAR{foo}} \OP{\VAR{form}
96 \Op{\NEV{\VAR{doc}}}})}
98 Unless bound already, assign value of \VAR{form} to dynamic variable
99 \retval{\VAR{foo}}.
102 \IT{(\xorGOO{\MC*{SETF}\\
103 \MC*{PSETF}}{\}} \Goos{\VAR{place}
104 \VAR{form}})}
106 Set \VAR{place}s to primary values of \VAR{form}s. Return \retval{values
107 of last \VAR{form}}/\retval{\NIL}; work sequentially/in parallel, respectively.
110 \IT{(\xorGOO{\SO*{SETQ}\\
111 \MC*{PSETQ}}{\}} \Goos{\VAR{symbol}
112 \VAR{form}})}
114 Set \VAR{symbol}s to primary values of \VAR{form}s. Return \retval{value
115 of last \VAR{form}}/\retval{\NIL}; work sequentially/in parallel, respectively.
118 \IT{(\FU*{SET} \DES{\VAR{symbol}} \VAR{foo})}
120 Set \VAR{symbol}'s value cell to \retval{\VAR{foo}}. Deprecated.
123 \IT{(\MC*{MULTIPLE-VALUE-SETQ} \VAR{vars} \VAR{form})}
125 Set elements of \VAR{vars} to the values of
126 \VAR{form}. Return \retval{\VAR{form}'s primary value}.
129 \IT{(\MC*{SHIFTF} \RP{\DES{\VAR{place}}} \VAR{foo})}
131 Store value of \VAR{foo} in rightmost \VAR{place} shifting values of
132 \VAR{place}s left, returning \retval{first \VAR{place}}.
135 \IT{(\MC*{ROTATEF} \OPn{\DES{\VAR{place}}})}
137 Rotate values of \VAR{place}s left, old first becoming new last
138 \VAR{place}'s value. Return \retval{\NIL}.
141 \IT{(\FU*{MAKUNBOUND} \DES{\VAR{foo}})}
143 Delete special variable \retval{\VAR{foo}} if any.
146 \label{:property_lists}
147 \IT{\arrGOO{(\FU*{GET} \VAR{ symbol} \VAR{ key }
148 \OP{\VAR{default}\DF{\NIL}})\\
149 (\FU*{GETF} \VAR{ place} \VAR{ key }
150 \OP{\VAR{default}\DF{\NIL}})}{.}}
152 \retval{First entry \VAR{key}} from property list stored in
153 \VAR{symbol}/in \VAR{place}, respectively, or \retval{\VAR{default}} if
154 there is no \VAR{key}. \kwd{setf}able.
157 \IT{(\FU*{GET-PROPERTIES} \VAR{property-list} \VAR{keys})}
159 Return \retval{key} and \retvalii{value} of first entry from \VAR{property-list}
160 matching a key from \VAR{keys}, and \retvaliii{tail of
161 \VAR{property-list}} starting with that key. Return \retval{\NIL},
162 \retvalii{\NIL}, and \retvaliii{\NIL} if there was no matching key
163 in \VAR{property-list}.
166 \IT{\arrGOO{(\FU*{REMPROP } \DES{\VAR{symbol}} \VAR{ key})\\
167 (\MC*{REMF } \DES{\VAR{place}} \VAR{ key})}{.}}
169 Remove first entry \VAR{key} from property list stored in
170 \VAR{symbol}/in \VAR{place}, respectively. Return \retval{\T} if \VAR{key}
171 was there, or \retval{\NIL} otherwise.
174 \end{LIST}
177 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
178 \subsection{Functions}
179 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
180 \label{section:Functions}
182 \begin{flushleft}
183 Below, ordinary lambda list (\OPn{\VAR{ord-$\lambda$}}) has the form\\
184 % \VAR{var} referenced from DEFSTRUCT
185 (\OPn{\VAR{var}}
186 \OP{\kwd{\&optional} \xorGOO{%
187 \VAR{var}\\
188 (\VAR{var } \OP{\VAR{init}\DF{\NIL}\text{ } \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}}
189 \penalty-5
190 \Op{\kwd{\&rest} \VAR{var}}
191 \penalty-5
192 \OP{\kwd{\&key} \xorGOO{%
193 \VAR{var}\\
194 (\xorGOO{%
195 \VAR{var}\\
196 (\kwd{:}\VAR{key } \VAR{var})}{\}}
197 \text{ }\OP{\VAR{init}\DF{\NIL}\text{ }\Op{\VAR{supplied-p}}})}{\}^{\!\!*}}
198 \penalty-5
199 \Op{\kwd{\&allow-other-keys}}}
200 \penalty-5
201 \OP{\kwd{\&aux} \xorGOO{%
202 \VAR{var}\\
203 (\VAR{var } \Op{\VAR{init}\DF{\NIL}})}{\}^{\!\!*}}}).
204 \end{flushleft}
205 \VAR{supplied-p} is \T\ if there is a corresponding
206 argument. \VAR{init} forms can refer to any \VAR{init} and
207 \VAR{supplied-p} to their left.
209 \begin{LIST}{1cm}
211 \IT{(\xorGOO{\MC*{DEFUN }\xorGOO{\VAR{foo}\\
212 (\kwd{setf} \VAR{ foo})}{.}\\
213 \MC*{LAMBDA}}{\}}
214 (\VAR{\OPn{ord-$\lambda$}}) \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
215 \Op{\NEV{\VAR{doc}}}
216 \PROGN{\VAR{form}})}
218 Define a function named \retval{\VAR{foo}} or \retval{(\kwd{setf}
219 \VAR{foo})}, or an anonymous \retval{function}, respectively, which applies
220 \VAR{form}s to \VAR{ord-$\lambda$}s. For \MC{defun}, \VAR{form}s are
221 enclosed in an implicit \SO{block} \VAR{foo}.
224 \IT{(\xorGOO{\SO*{FLET}\\
225 \SO*{LABELS}}{\}}
226 (\OPn{(\xorGOO{\VAR{foo}\\
227 (\kwd{setf} \VAR{ foo})}{\}}
228 (\OPn{\VAR{ord-$\lambda$}})
229 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{local-decl}}})}
230 \Op{\NEV{\VAR{doc}}}
231 \PROGN{\VAR{local-form}})}) \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
232 \PROGN{\VAR{form}})}
234 Evaluate \VAR{form}s with
235 locally defined functions \VAR{foo}. Globally defined functions of
236 the same name are shadowed. Each \VAR{foo} is also the name of an
237 implicit \SO{block} around its corresponding \OPn{\VAR{local-form}}.
238 Only for \SO{LABELS}, functions \VAR{foo} are visible inside
239 \VAR{local-forms}. Return \retval{values of \VAR{form}s}.
242 \IT{(\SO*{FUNCTION} \xorGOO{%
243 \VAR{foo}\\
244 (\MC{lambda } \OPn{\VAR{form}})}{\}})}
246 Return lexically innermost \retval{function} named \VAR{foo} or a
247 lexical closure of the \retval{\MC{lambda} expression}.
250 \IT{(\FU*{APPLY} \xorGOO{\VAR{function}\\
251 (\kwd{setf } \VAR{function})}{\}} \RP{\VAR{arg}})}
253 Return \retval{values of \VAR{function}} called on
254 \VAR{arg}s. Last \VAR{arg} must be a list. \kwd{setf}able if
255 \VAR{function} is one of \FU{aref}, \FU{bit}, and \FU{sbit}.
258 \IT{(\FU*{FUNCALL} \VAR{function} \OPn{arg})}
260 Return \retval{values of \VAR{function}} called with \VAR{arg}s.
263 \IT{(\SO*{MULTIPLE-VALUE-CALL} \VAR{foo} \OPn{\VAR{form}})}
264 {Call function
265 \VAR{foo} with all the values of each \VAR{form} as its arguments. Return
266 \retval{values returned by \VAR{foo}}.
269 \IT{(\FU*{VALUES-LIST} \VAR{list})}
271 Return \retval{elements of \VAR{list}}.
274 \IT{(\FU*{VALUES} \OPn{\VAR{foo}})}
276 Return as multiple values the \retval{primary values} of the
277 \VAR{foo}s. \kwd{setf}able.
280 \IT{(\FU*{MULTIPLE-VALUE-LIST} \VAR{form})}
282 Return in a \retval{list} values of \VAR{form}.
285 \IT{(\MC*{NTH-VALUE} \VAR{n} \VAR{form})}
287 Zero-indexed \retval{\VAR{n}th return value} of \VAR{form}.
290 \IT{(\FU*{COMPLEMENT} \VAR{function})}
292 Return \retval{new function} with same arguments and same side effects
293 as \VAR{function}, but with complementary truth value.
296 \IT{(\FU*{CONSTANTLY} \VAR{foo})}
298 Return \retval{function} of any number of arguments returning \VAR{foo}.
301 \IT{(\FU*{IDENTITY} \VAR{foo})}
303 Return \retval{\VAR{foo}}.
306 \IT{(\FU*{FUNCTION-LAMBDA-EXPRESSION} \VAR{function})}
308 If available, return \retval{lambda expression} of \VAR{function},
309 \retvalii{\NIL} if \VAR{function} was defined in an environment
310 without bindings, and \retvaliii{name} of \VAR{function}.
313 \IT{(\FU*{FDEFINITION} \xorGOO{\VAR{foo}\\
314 (\kwd{setf } \VAR{foo})}{\}})}
316 \retval{Definition} of global function \VAR{foo}. \kwd{setf}able.
319 \IT{(\FU*{FMAKUNBOUND} \VAR{foo})}
321 Remove global function or macro definition \retval{\VAR{foo}}.
324 \IT{\arrGOO{\CNS*{CALL-ARGUMENTS-LIMIT}\\
325 \CNS*{LAMBDA-PARAMETERS-LIMIT}}{.}}
327 Upper bound of the number of function arguments or lambda list
328 parameters, respectively; $\geq50$.
331 \IT{\CNS*{MULTIPLE-VALUES-LIMIT}}
333 Upper bound of the number of values a multiple value can have;
334 $\geq20$.
337 \end{LIST}
340 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
341 \subsection{Macros}
342 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
343 \label{section:Macros}
345 \begin{flushleft}
346 Below, macro lambda list (\OPn{\VAR{macro-$\lambda$}}) has the form of
347 either
348 \penalty-5
349 (\Op{\kwd{\&whole} \VAR{var}}
350 \penalty-5
351 \Op{\VAR{E}}
352 \penalty-5
353 \xorGOO{%
354 \VAR{var}\\
355 (\OPn{\VAR{macro-$\lambda$}})}{\}^{\!\!*}}
356 \penalty-5
357 \Op{\VAR{E}}
358 \penalty-5
359 \Op{\kwd{\&optional}
360 \xorGOO{%
361 \VAR{var}\\
362 (\xorGOO{%
363 \VAR{var}\\
364 (\OPn{\VAR{macro-$\lambda$}})}{\}}\text{ }
365 \OP{\VAR{init}\DF{\NIL}\text{ } \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}}
366 \penalty-5
367 \Op{\VAR{E}}
368 \penalty-5
369 \Op{%
370 \xorGOO{%
371 \kwd{\&rest}\\
372 \kwd{\&body}}{\}}
373 \xorGOO{%
374 \VAR{var}\\
375 (\OPn{\VAR{macro-$\lambda$}})}{\}}}
376 \penalty-5
377 \Op{\VAR{E}}
378 \penalty-5
379 \OP{\kwd{\&key}
380 \xorGOO{%
381 \VAR{var}\\
382 (\xorGOO{%
383 \VAR{var}\\
384 (\kwd{:}\VAR{key } \xorGOO{%
385 \VAR{var}\\
386 (\OPn{\VAR{macro-$\lambda$}})}{\}})}{\}}
387 \text{ }\OP{\VAR{init}\DF{\NIL}\text{ } \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}
388 \Op{\VAR{E}}
389 \Op{\kwd{\&allow-other-keys}}}
390 \penalty-5
391 \Op{\kwd{\&aux}
392 \xorGOO{%
393 \VAR{var}\\
394 (\VAR{var } \Op{\VAR{init}\DF{\NIL}})}{\}^{\!\!*}}}
395 \penalty-5
396 \Op{\VAR{E}})
399 \penalty-5
400 (\Op{\kwd{\&whole}
401 \VAR{var}}
402 \penalty-5
403 \Op{\VAR{E}}
404 \penalty-5
405 \xorGOO{%
406 \VAR{var}\\
407 (\OPn{\VAR{macro-$\lambda$}})}{\}^{\!\!*}}
408 \penalty-5
409 \Op{\VAR{E}}
410 \penalty-5
411 \Op{\kwd{\&optional}
412 \xorGOO{%
413 \VAR{var}\\
414 (\xorGOO{%
415 \VAR{var}\\
416 (\OPn{\VAR{macro-$\lambda$}})}{\}}\text{ }
417 \OP{\VAR{init}\DF{\NIL}\text{ } \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}}
418 \penalty-5
419 \Op{\VAR{E}}
420 \kwd{.}
421 \VAR{var}).
422 \penalty-5
423 \end{flushleft}
424 One toplevel \Op{\VAR{E}} may be replaced by \kwd{\&environment}
425 \VAR{var}. \VAR{supplied-p} is \T\ if there is a corresponding
426 argument. \VAR{init} forms can refer to any \VAR{init} and
427 \VAR{supplied-p} to their left.
429 \begin{LIST}{1cm}
431 \IT{(\xorGOO{\MC*{DEFMACRO}\\
432 \FU*{DEFINE-COMPILER-MACRO}}{\}}
433 \xorGOO{\VAR{foo}\\
434 (\kwd{setf } \VAR{foo})}{\}}
435 (\OPn{\VAR{macro-$\lambda$}})
436 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})} \Op{\NEV{\VAR{doc}}}
437 \PROGN{\VAR{form}})}
439 Define macro \retval{\VAR{foo}} which on evaluation as (\VAR{foo}
440 \VAR{tree}) applies expanded \VAR{form}s to arguments from
441 \VAR{tree}, which corresponds to \VAR{tree}-shaped
442 \VAR{macro-$\lambda$}s. \VAR{form}s are enclosed in an implicit
443 \SO{block} \VAR{foo}.
446 \IT{(\MC*{DEFINE-SYMBOL-MACRO} \VAR{foo} \VAR{form})}
448 Define symbol macro \retval{\VAR{foo}} which on evaluation evaluates
449 expanded \VAR{form}.
452 \IT{(\SO*{MACROLET} (\OPn{(\VAR{foo} (\OPn{\VAR{macro-$\lambda$}})
453 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{local-decl}}})}
454 \Op{\NEV{\VAR{doc}}} \PROGN{\VAR{macro-form}})}) \OPn{(\kwd{declare}
455 \OPn{\NEV{\VAR{decl}}})} \PROGN{\VAR{form}})}
457 Evaluate \retval{\VAR{form}s} with locally defined mutually
458 invisible macros \VAR{foo} which are enclosed in implicit \SO{block}s
459 of the same name.
462 \IT{(\SO*{SYMBOL-MACROLET} (\OPn{(\VAR{foo}
463 \VAR{expansion-form})}) \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
464 \PROGN{\VAR{form}})}
466 Evaluate \retval{\VAR{form}s} with locally defined symbol macros
467 \VAR{foo}.
470 \IT{(\MC*{DEFSETF} \NEV{\VAR{function}} \xorGOO{%
471 \NEV{\VAR{updater}} \text{ } \Op{\NEV{\VAR{doc}}}\\
472 (\OPn{\VAR{setf-$\lambda$}}) \text{ } (\OPn{\VAR{s-var}}) \text{ }
473 \OPn{(\kwd{declare } \OPn{\NEV{\VAR{decl}}})}\text{ }
474 \Op{\NEV{\VAR{doc}}} \text{ } \PROGN{\VAR{form}}}{\}})
475 \penalty-5
476 where defsetf lambda list (\OPn{\VAR{setf-$\lambda$}}) has the form
477 \penalty-5
478 (\OPn{\VAR{var}}
479 \OP{\kwd{\&optional} \xorGOO{%
480 \VAR{var}\\
481 (\VAR{var } \OP{\VAR{init}\DF{\NIL}\text{ } \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}}
482 \penalty-5
483 \Op{\kwd{\&rest} \VAR{var}}
484 \penalty-5
485 \OP{\kwd{\&key} \xorGOO{%
486 \VAR{var}\\
487 (\xorGOO{%
488 \VAR{var}\\
489 (\kwd{:}\VAR{key } \VAR{var})}{\}}
490 \text{ }\OP{\VAR{init}\DF{\NIL}\text{ }\Op{\VAR{supplied-p}}})}{\}^{\!\!*}}
491 \penalty-5
492 \Op{\kwd{\&allow-other-keys}}}
493 \penalty-5
494 \OP{\kwd{\&environment} \VAR{var}}%
498 Specify how to \kwd{setf} a place accessed by
499 \retval{\VAR{function}}.
500 \EM{Short form:} (\kwd{setf} (\VAR{function} \OPn{\VAR{arg}}) \VAR{value-form}) is
501 replaced by (\VAR{updater} \OPn{\VAR{arg}} \VAR{value-form}).
502 \EM{Long form:} on invocation of (\kwd{setf} (\VAR{function}
503 \OPn{\VAR{arg}}) \VAR{value-form}), \VAR{form}s must expand
504 into code that sets the place accessed where \VAR{setf-$\lambda$}
505 and \OPn{\VAR{s-var}} describe the arguments of \VAR{function} and
506 the value(s) to be stored, respectively; and that returns
507 the value(s) of \OPn{\VAR{s-var}}. \VAR{form}s are enclosed in an
508 implicit \SO{block} named \VAR{function}.
511 \IT{(\MC*{DEFINE-SETF-EXPANDER} \VAR{function}
512 (\OPn{\VAR{macro-$\lambda$}})
513 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})} \Op{\NEV{\VAR{doc}}}
514 \PROGN{\VAR{form}})}
516 Specify how to \kwd{setf} a place accessed by
517 \retval{\VAR{function}}. On invocation of (\kwd{setf} (\VAR{function}
518 \OPn{\VAR{arg}}) \VAR{value-form}), \OPn{\VAR{form}} must expand
519 into code returning \VAR{arg-vars}, \VAR{args}, \VAR{newval-vars},
520 \VAR{set-form}, and \VAR{get-form} as described with
521 \FU{GET-SETF-EXPANSION} where the elements of macro
522 lambda list \OPn{\VAR{macro-$\lambda$}} are bound to corresponding
523 \VAR{arg}s. \VAR{form}s are enclosed in an implicit \SO{block} \VAR{function}.
526 \IT{(\FU*{GET-SETF-EXPANSION} \VAR{place} \Op{\VAR{environment}\DF{\NIL}})}
528 Return lists of temporary variables \retval{\VAR{arg-vars}} and of
529 corresponding \retvalii{\VAR{args}} as given with \VAR{place},
530 list \retvaliii{\VAR{\VAR{newval-vars}}} with temporary variables
531 corresponding to the new values, and \retvaln{4}{\VAR{set-form}}
532 and \retvaln{5}{\VAR{get-form}} specifying in terms of \VAR{arg-vars}
533 and \VAR{newval-vars} how to \kwd{setf} and how to read
534 \VAR{place}.
537 \IT{(\MC*{DEFINE-MODIFY-MACRO} \VAR{foo}
538 (\OP{\kwd{\&optional} \xorGOO{%
539 \VAR{var}\\
540 (\VAR{var } \OP{\VAR{init}\DF{\NIL}\text{ }
541 \Op{\VAR{supplied-p}}})}{\}^{\!\!*}}}
542 \Op{\kwd{\&rest} \VAR{var}})
543 \VAR{function} \Op{\NEV{\VAR{doc}}})}
545 Define macro \retval{\VAR{foo}} able to modify a place. On
546 invocation of (\VAR{foo} \VAR{place} \OPn{\VAR{arg}}), the value of
547 \VAR{function} applied to \VAR{place} and \VAR{arg}s will be stored into
548 \VAR{place} and returned.
551 \IT{\CNS*{LAMBDA-LIST-KEYWORDS}}
552 {List of macro lambda list keywords. These are at least:
554 \begin{LIST}{.5cm}
556 \IT{\kwd*{\&whole} \VAR{var}}
557 {Bind \VAR{var} to the entire macro call form.}
559 \IT{\kwd*{\&optional} \OPn{\VAR{var}}}
560 {Bind \VAR{var}s to corresponding arguments if any.}
562 \IT{\Goo{%
563 \kwd*{\&rest}\XOR
564 \kwd*{\&body}} \VAR{var}}
565 {Bind \VAR{var} to a list of remaining arguments.}
567 \IT{\kwd*{\&key} \OPn{\VAR{var}}}
568 {Bind \VAR{var}s to corresponding keyword arguments.}
570 \IT{\kwd*{\&allow-other-keys}}
572 Suppress keyword argument checking. Callers can do so using
573 \kwd*{:allow-other-keys}~\T.
576 \IT{\kwd*{\&environment} \VAR{var}}
577 {Bind \VAR{var} to the lexical compilation environment.}
579 \IT{\kwd*{\&aux} \VAR{var}}
580 {Bind \VAR{var}s as in \SO{let\A}.}
582 \end{LIST}
583 \end{LIST}
586 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
587 \subsection{Control Flow}
588 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
589 \begin{LIST}{1cm}
591 \IT{(\SO*{IF} \VAR{test} \VAR{then} \Op{\VAR{else}\DF{\NIL}})}
593 Return values of \retval{\VAR{then}} if \VAR{test} returns \T;
594 return values of \retval{\VAR{else}} otherwise.
597 \IT{(\MC*{COND} \OPn{(\VAR{test} \PROGN{\VAR{then}}\DF{\VAR{test}})})}
599 Return the \retval{values} of the first
600 \OPn{\VAR{then}} whose \VAR{test} returns \T; return
601 \retval{\NIL} if all \VAR{test}s return \NIL.
604 \IT{(\xorGOO{\MC*{WHEN}\\
605 \MC*{UNLESS}}{\}} \VAR{test}
606 \PROGN{\VAR{foo}})}
608 Evaluate \VAR{foo}s and return \retval{their values} if \VAR{test}
609 returns \T\ or \NIL, respectively. Return \retval{\NIL} otherwise.
612 \IT{(\MC*{CASE} \VAR{test} \OPn{(\NEV{\VAR{keys}} \PROGN{\VAR{foo}})}
613 \OP{(\xorGOO{\kwd*{OTHERWISE}\\
614 \T}{\}} \PROGN{\VAR{bar}})\DF{\NIL}})}
616 Return the \retval{values} of the first \OPn{\VAR{foo}} one of whose \VAR{keys} is
617 \kwd{eql} \VAR{test}.
618 Return \retval{values of \VAR{bar}s} if no element of \VAR{keys} matches.
621 \IT{(\Goo{\MC*{ECASE}\XOR\MC*{CCASE}} \VAR{test}
622 \OPn{(\NEV{\VAR{keys}} \PROGN{\VAR{foo}})})}
624 Return the \retval{values} of the first \OPn{\VAR{foo}} one of whose \VAR{keys} is \kwd{eql}
625 \VAR{test}. Signal non-correctable/correctable \kwd{type-error} and
626 return \retval{\NIL} if no element of \VAR{keys} matches.
629 \IT{(\MC*{AND} \OPn{\VAR{form}}\DF{\T})}
631 Evaluate \VAR{form}s from left to
632 right. Immediately return \retval{\NIL} if one \VAR{form}'s value is \NIL. Return
633 \retval{values of last \VAR{form}} otherwise.
636 \IT{(\MC*{OR} \OPn{\VAR{form}}\DF{\NIL})}
638 Evaluate \VAR{form}s from left to
639 right. Immediately return \retval{primary value} of first
640 non-\NIL-evaluating form, or \retval{all values} if last \VAR{form}
641 is reached. Return \retval{\NIL} if no \VAR{form} returns \T.
644 \IT{(\SO*{PROGN} \OPn{\VAR{form}}\DF{\NIL})}
645 {\label{:progn}
646 Evaluate \VAR{form}s sequentially. Return
647 \retval{values of last \VAR{form}}.
650 \IT{\arrGOO{%
651 (\SO*{MULTIPLE-VALUE-PROG1} \VAR{ form-r} \OPn{\VAR{ form}})\\
652 (\MC*{PROG1} \VAR{ form-r} \OPn{\VAR{ form}})\\
653 (\MC*{PROG2} \VAR{ form-a} \VAR{ form-r} \OPn{\VAR{ form}})}{.}}
655 Evaluate forms in order. Return \retval{values/1st value},
656 respectively, of \VAR{form-r}.
659 \IT{(\xorGOO{\SO*{LET}\\
660 \SO*{LET\A}}{\}}(%
661 \orGOO{\VAR{name}\\
662 (\VAR{name }\Op{\VAR{value}\DF{\NIL}})}{\}^{\!\!*}})
663 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
664 \PROGN{\VAR{form}})}
666 Evaluate \VAR{form}s with \VAR{name}s lexically bound (in parallel or
667 sequentially, respectively) to \VAR{value}s. Return
668 \retval{values of \VAR{form}s}.
671 \IT{(\xorGOO{\MC*{PROG}\\
672 \MC*{PROG\A}}{\}}
673 (\orGOO{%
674 \VAR{var}\\
675 (\VAR{var } \Op{\VAR{value}\DF{\NIL}})}{\}^{\!\!*}})
676 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
677 \xorGOO{\NEV{\VAR{tag}}\\\VAR{form}}{\}^{\!\!*}})}
679 Evaluate \SO{TAGBODY}-like body with \VAR{var}s locally bound (in
680 parallel or sequentially, respectively) to \VAR{value}s. Return
681 \retval{\NIL} or explicitly \retval{\MC{return}ed values}.
682 Implicitly, the whole form is a \SO{block} named \NIL.
685 \IT{(\SO*{PROGV} \VAR{symbols} \VAR{values} \PROGN{\VAR{form}})}
687 Evaluate \VAR{form}s with locally established dynamic bindings of
688 \VAR{symbols} to \VAR{values} or \NIL. Return \retval{values of
689 \VAR{form}s}.
692 \IT{(\SO*{UNWIND-PROTECT} \VAR{protected} \OPn{\VAR{cleanup}})}
694 Evaluate \VAR{protected} and then, no matter how control leaves
695 \VAR{protected}, \VAR{cleanup}s. Return \retval{values of
696 \VAR{protected}}.
699 \IT{(\MC*{DESTRUCTURING-BIND} \VAR{destruct-$\lambda$} \VAR{bar} \OPn{(\kwd{declare}
700 \OPn{\NEV{\VAR{decl}}})} \PROGN{\VAR{form}})}
702 Evaluate \VAR{form}s with variables from tree \VAR{destruct-$\lambda$} bound to
703 corresponding elements of tree \VAR{bar}, and return \retval{their
704 values}. \VAR{destruct-$\lambda$} resembles \VAR{macro-$\lambda$}
705 (section \ref{section:Macros}), but without any \kwd{\&environment}
706 clause.
709 \IT{(\MC*{MULTIPLE-VALUE-BIND} (\OPn{\NEV{\VAR{var}}}) \VAR{values-form}
710 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})} \PROGN{\VAR{body-form}})}
712 Evaluate
713 \VAR{body-form}s with \VAR{var}s lexically bound to the return values of
714 \VAR{values-form}. Return \retval{values of \VAR{body-form}s}.
717 \IT{(\SO*{BLOCK} \VAR{name} \PROGN{\VAR{form}})}
719 Evaluate \VAR{form}s in a lexical environment, and
720 return \retval{their values} unless interrupted by
721 \SO{RETURN-FROM}.
724 \IT{\arrGOO{(\SO*{RETURN-FROM } \VAR{foo } \Op{\VAR{result}\DF{\NIL}})\\
725 (\MC*{RETURN } \Op{\VAR{result}\DF{\NIL}})}{.}}
727 Have nearest enclosing \SO{block} named \VAR{foo}/named \NIL,
728 respectively, return with values of \VAR{result}.
731 \IT{(\SO*{TAGBODY} \Goos{\NEV{\VAR{tag}}\XOR\VAR{form}})}
733 Evaluate \VAR{form}s in al lexical environment. \VAR{tag}s (symbols or integers) have lexical
734 scope and dynamic extent, and are targets for \SO{GO}. Return
735 \retval{\NIL}.
738 \IT{(\SO*{GO} \NEV{\VAR{tag}})}
740 Within the innermost enclosing \SO{tagbody}, jump to a tag \kwd{eql} \VAR{tag}.
743 \IT{(\SO*{CATCH} \VAR{tag} \PROGN{\VAR{form}})}
745 Evaluate \VAR{form}s and return \retval{their values} unless
746 interrupted by \SO{THROW}.
749 \IT{(\SO*{THROW} \VAR{tag} \VAR{form})}
750 {Have the nearest dynamically
751 enclosing \SO{CATCH} with a tag \FU{eq} \VAR{tag} return with the
752 values of \VAR{form}.
755 \IT{(\FU*{SLEEP} \VAR{n})}
756 {Wait \VAR{n} seconds, return \retval{\NIL}.
759 \end{LIST}
762 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
763 \subsection{Iteration}
764 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
766 \begin{LIST}{1cm}
768 \IT{(\xorGOO{\MC*{DO}\\
769 \MC*{DO\A}}{\}}
770 (\xorGOO{%
771 \VAR{var}\\
772 (\VAR{var } \OP{ \VAR{start } \Op{\VAR{step}}})}{\}^{\!\!*}})
773 (\VAR{stop} \PROGN{\VAR{result}})
774 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
775 \xorGOO{\NEV{\VAR{tag}}\\\VAR{form}}{\}^{\!\!*}})}
777 Evaluate \SO{TAGBODY}-like body with \VAR{var}s successively bound according
778 to the values of the corresponding \VAR{start} and \VAR{step}
779 forms. \VAR{var}s are bound in parallel/sequentially, respectively.
780 Stop iteration when \VAR{stop} is \T. Return \retval{values of
781 \OPn{\VAR{result}}}. Implicitly, the whole form is a \SO{block}
782 named \NIL.
785 \IT{(\MC*{DOTIMES} (\VAR{var} \VAR{i} \Op{\VAR{result}\DF{\NIL}})
786 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
787 \Goos{\NEV{\VAR{tag}}\XOR\VAR{form}})}
789 Evaluate \SO{TAGBODY}-like body with \VAR{var} successively bound
790 to integers from 0 to $i - 1$. Upon evaluation of
791 \retval{\VAR{result}}, \VAR{var} is \VAR{i}. Implicitly, the whole
792 form is a \SO{block} named \NIL.
795 \IT{(\MC*{DOLIST }(\VAR{var} \VAR{list} \Op{\VAR{result}\DF{\NIL}})
796 \OPn{(\kwd{declare} \OPn{\NEV{\VAR{decl}}})}
797 \Goos{\NEV{\VAR{tag}}\XOR\VAR{form}})}
799 Evaluate \SO{TAGBODY}-like body with \VAR{var} successively bound
800 to the elements of \VAR{list}. Upon evaluation of
801 \retval{\VAR{result}}, \VAR{var} is \NIL. Implicitly, the whole form
802 is a \SO{block} named \NIL.
806 \end{LIST}
808 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
809 \subsection{Loop Facility}
810 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
813 \begin{LIST}{1cm}
815 \IT{(\MC*{LOOP} \OPn{\VAR{form}})}
817 Simple Loop. If \VAR{form}s do not contain any atomic Loop Facility
818 keywords, evaluate them forever in an implicit \SO{block} named \NIL.
821 \IT{(\MC*{LOOP} \OPn{\VAR{form}})}
823 Loop Facility. For Loop Facility keywords
824 see below and Figure \ref{loop-overview}.
827 \begin{LIST}{.5cm}
829 \IT{\LKWD*{named} \VAR{n}\DF{\NIL}}
831 Give \MC{loop}'s implicit \SO{block} a name.
834 \IT{\Goop{\LKWD*{with}
835 \xorGOO{%
836 \VAR{var-s}\\
837 (\OPn{\VAR{var-s}})}{\}}
838 \Op{\VAR{d-type}} \LKWD*{=} \VAR{foo}} \Goos{\LKWD*{and}
839 \xorGOO{%
840 \VAR{var-p}\\
841 (\OPn{\VAR{var-p}})}{\}}
842 \Op{\VAR{d-type}} \LKWD*{=} \VAR{bar}}
843 \penalty-10
844 where destructuring type specifier \VAR{d-type} has the form
845 \penalty-5
846 \GOO{\kwd{fixnum}\XOR
847 \kwd{float}\XOR
848 \T\XOR
849 \NIL\XOR
850 \GOo{%
851 \LKWD*{of-type}
852 \xorGOO{\VAR{type}\\
853 (\OPn{\VAR{type}})}{\}}}}
856 Initialize (possibly trees of) local variables \VAR{var-s}
857 sequentially and \VAR{var-p} in parallel.
860 \IT{\Goo{\LKWD*{initially}\XOR\LKWD*{finally}} \RP{\VAR{form}}}
862 Evaluate \VAR{form}s before begin, or after end, respectively, of iterations.
865 \begin{figure}%
866 \begin{center}%
867 \begin{sideways}%
869 \arraycolsep0pt
871 \text{\kwd{loop}}\text{ }
872 \Op{
873 \text{\LKWD{named} \VAR{n}\DF{\NIL}}
875 \left\{
876 \begin{array}{l}
877 \text{\LKWD{with}
878 \xorGOO{%
879 \VAR{var}\\
880 (\OPn{\VAR{var}})}{\}}
881 \Op{\VAR{d-type}} \LKWD{=} \VAR{foo }}
882 \{\text{\LKWD{and}
883 \xorGOO{%
884 \VAR{var}\\
885 (\OPn{\VAR{var}})}{\}}
886 \Op{\VAR{d-type}} \LKWD{=}
887 \VAR{bar}}\}^{*} \\ \\[-2.4ex]
888 \left.\!
889 \begin{array}{l}
890 \text{\LKWD{for}} \\
891 \text{\LKWD{as}}
892 \end{array}\right\}
893 \boxed{
894 \text{\xorGOO{%
895 \VAR{var}\\
896 (\OPn{\VAR{var}})}{\}}}%
897 \Op{\VAR{d-type}}
898 \left\{
899 \begin{array}{l}
900 \left.\!
901 \begin{array}{l}
902 \OP{
903 \left\{
904 \begin{array}{l}
905 \text{\LKWD{upfrom}}\\
906 \text{\LKWD{from}}
907 \end{array}
908 \right\}
909 \text{\VAR{start}\DF{\LIT{0}}}
910 }\text{ }
911 \OP{
912 \left\{
913 \begin{array}{l}
914 \text{\LKWD{upto}}\\
915 \text{\LKWD{to}}\\
916 \text{\LKWD{below}}
917 \end{array}
918 \right\}
919 \text{\VAR{form}}
921 \text{\LKWD{from} \VAR{start}}
922 \left\{
923 \begin{array}{l}
924 \text{\LKWD{downto}}\\
925 \text{\LKWD{above}}
926 \end{array}
927 \right\}
928 \text{\VAR{form }}\\
929 \text{\LKWD{downfrom} \VAR{start}}\text{ }
930 \OP{
931 \left\{
932 \begin{array}{l}
933 \text{\LKWD{downto}}\\
934 \text{\LKWD{to}}\\
935 \text{\LKWD{above}}
936 \end{array}
937 \right\}
938 \text{\VAR{form}}
940 \end{array}
941 \right\}
942 \Op{
943 \text{\LKWD{by} \VAR{step}\DF{\LIT{1}}}
945 \left.\!
946 \begin{array}{l}
947 \text{\LKWD{in}} \\
948 \text{\LKWD{on}}
949 \end{array}
950 \right\}
951 \text{\VAR{list}}\text{ }
952 \Op{
953 \text{\LKWD{by} \VAR{function}\DF{\kwd{\#'cdr}}}
955 \text{\LKWD{=} \VAR{foo }}
956 \Op{
957 \text{\LKWD{then} \VAR{bar}\DF{\VAR{foo}}}
959 \text{\LKWD{across} \VAR{vector}}\\
960 \text{\LKWD{being}}
961 \left\{
962 \begin{array}{l}
963 \text{\LKWD{the}}\\
964 \text{\LKWD{each}}
965 \end{array}
966 \right\}%
967 \left\{
968 \begin{array}{{l}}
969 \left.\!
970 \begin{array}{l}
971 \left.\!
972 \begin{array}{l}
973 \text{\LKWD{hash-key}}\\
974 \text{\LKWD{hash-keys}}
975 \end{array}
976 \right\}%
977 \left\{
978 \begin{array}{l}
979 \text{\LKWD{of}}\\
980 \text{\LKWD{in}}
981 \end{array}
982 \right\}
983 \text{\VAR{hash }}
984 \Op{
985 \text{\LKWD{using} (\LKWD{hash-value} \VAR{v})}%
987 \left.\!
988 \begin{array}{l}
989 \text{\LKWD{hash-value}}\\
990 \text{\LKWD{hash-values}}
991 \end{array}
992 \right\}%
993 \left\{
994 \begin{array}{l}
995 \text{\LKWD{of}}\\
996 \text{\LKWD{in}}
997 \end{array}
998 \right\}
999 \text{\VAR{hash }}
1000 \Op{
1001 \text{\LKWD{using} (\LKWD{hash-key} \VAR{k})}%
1003 \end{array}
1004 \right.\\
1005 \left.\!
1006 \begin{array}{l}
1007 \text{\LKWD{symbol\Op{s}}}\\
1008 \text{\LKWD{present-symbol\Op{s}}}\\
1009 \text{\LKWD{external-symbol\Op{s}}}
1010 \end{array}
1011 \right\}%
1012 \OP{
1013 \left\{
1014 \begin{array}{l}
1015 \text{\LKWD{of}}\\
1016 \text{\LKWD{in}}
1017 \end{array}
1018 \right\} \text{\VAR{package}\DF{\V{\A package\A}}}%
1020 \end{array}\!\!%
1021 \right.%
1022 \end{array}%
1023 \right\}_{\displaystyle{\mathbb{F}_0}}
1024 }%boxed
1025 \left\{
1026 \text{\LKWD{and} }\boxed{\mathbb{F}_i\!}
1027 \right\}^{\!*}\\
1028 \\[-2.4ex]
1029 \left.\!%
1030 \begin{array}{l}
1031 \text{\LKWD{initially}} \\
1032 \text{\LKWD{finally}}
1033 \end{array}
1034 \right\}
1035 \text{\VAR{form}}^{+} \\
1037 \end{array}
1038 \right\}^{\!\!\displaystyle{*}}
1039 %Bottleneck
1040 \left\{
1041 \begin{array}{l}
1042 \text{\LKWD{repeat} \VAR{num}}\\
1043 \left.\!
1044 \begin{array}{l}
1045 \text{\LKWD{while}}\\
1046 \text{\LKWD{until}}\\
1047 \text{\LKWD{always}}\\
1048 \text{\LKWD{never}}\\
1049 \text{\LKWD{thereis}}
1050 \end{array}
1051 \right\}
1052 \text{\VAR{test}}\\
1053 \boxed{
1054 \left.\!
1055 \begin{array}{l}
1056 \left.\!
1057 \begin{array}{l}
1058 \text{\LKWD{do}}\\
1059 \text{\LKWD{doing}}
1060 \end{array}
1061 \right\}
1062 \text{\VAR{form}}^{+}\\
1063 \text{\LKWD{return}}
1064 \left\{
1065 \begin{array}{l}
1066 \text{\VAR{form}}\\
1067 \text{\LKWD{it}}
1068 \end{array}
1069 \right.\\
1070 \left.\!
1071 \begin{array}{l}
1072 \text{\LKWD{collect\Op{ing}}}\\
1073 \text{\LKWD{append\Op{ing}}}\\
1074 \text{\LKWD{nconc\Op{ing}}}
1075 \end{array}
1076 \right\}
1077 \left\{
1078 \begin{array}{l}
1079 \text{\VAR{form}}\\
1080 \text{\LKWD{it}}
1081 \end{array}
1082 \right\} \Op{\text{\LKWD{into }\VAR{list}}}\\
1083 \left.\!
1084 \begin{array}{l}
1085 \text{\LKWD{count\Op{ing}}}\\
1086 \text{\LKWD{sum\Op{ming}}}\\
1087 \text{\LKWD{maximize}}\\
1088 \text{\LKWD{maximizing}}\\
1089 \text{\LKWD{minimize}}\\
1090 \text{\LKWD{minimizing}}
1091 \end{array}
1092 \right\}
1093 \left\{
1094 \begin{array}{l}
1095 \text{\VAR{form}}\\
1096 \text{\LKWD{it}}
1097 \end{array}
1098 \right\}
1099 \Op{\text{\LKWD{into }\VAR{num}}}\text{ }
1100 \Op{\text{\VAR{type}}}\\
1101 \left.\!
1102 \begin{array}{l}
1103 \text{\LKWD{if}}\\
1104 \text{\LKWD{when}}\\
1105 \text{\LKWD{unless}}
1106 \end{array}
1107 \right\}%
1108 \text{\VAR{test }}
1109 \boxed{\mathbb{C}_i\!}\{\text{\LKWD{and}}\,
1110 \boxed{\mathbb{C}_j\!}\}^{*}\Op{\text{\LKWD{else}}\,
1111 \boxed{\mathbb{C}_k\!}\{\text{\LKWD{and}}\,
1112 \boxed{\mathbb{C}_l\!}\}^{*}}
1113 \Op{\text{\LKWD{end}}}\!\!\!\!\!\!
1114 \end{array}
1115 \right._{\!\!\!\!\displaystyle{\mathbb{C}_0}}
1116 }%boxed
1118 \\[-2.4ex]
1119 \left.\!
1120 \begin{array}{l}
1121 \text{\LKWD{initially}} \\
1122 \text{\LKWD{finally}}
1123 \end{array}
1124 \right\}
1125 \text{\VAR{form}}^{+}
1126 \end{array}
1127 \right\}^{\displaystyle{\!\!*}}
1129 \!)%
1130 \end{sideways}%
1131 \end{center}%
1132 \vspace{-3em}
1133 \raisebox{0em}[0em][0em]{\parbox[b]{4cm}{\caption{\protect\raggedright Loop Facility, Overview.\label{loop-overview}}}}
1134 \end{figure}
1136 \IT{\GOop{\Goo{\LKWD*{for}\XOR\LKWD*{as}}
1137 \xorGOO{%
1138 \VAR{var-s}\\
1139 (\OPn{\VAR{var-s}})}{\}}
1140 \Op{\VAR{d-type}}}
1141 \GOos{\LKWD*{and}
1142 \xorGOO{%
1143 \VAR{var-p}\\
1144 (\OPn{\VAR{var-p}})}{\}}
1145 \Op{\VAR{d-type}}}}
1147 Begin of iteration control clauses. Initialize and step (possibly
1148 trees of) local variables \VAR{var-s} sequentially and \VAR{var-p}
1149 in parallel. Destructuring type specifier \VAR{d-type} as with \LKWD{with}.
1152 \begin{LIST}{.5cm}
1154 \IT{\Goo{\LKWD*{upfrom}\XOR\LKWD*{from}\XOR\LKWD*{downfrom}}
1155 \VAR{start}}
1157 Start stepping with \VAR{start}
1160 \IT{\Goo{\LKWD*{upto}\XOR\LKWD*{downto}\XOR\LKWD*{to}\XOR\LKWD*{below}\XOR\LKWD*{above}}
1161 \VAR{form}}
1163 Specify \VAR{form} as the end value for stepping.
1166 \IT{\Goo{\LKWD*{in}\XOR\LKWD*{on}} \VAR{list}}
1168 Bind \VAR{var} to successive elements/tails, respectively, of \VAR{list}.
1171 \IT{\LKWD*{by} \Goo{\VAR{step}\DF{\LIT{1}}\XOR\VAR{function}\DF{\kwd{\#'cdr}}}}
1173 Specify the (positive) decrement or increment or the
1174 \VAR{function} of one argument returning the next part of the list.
1177 \IT{\LKWD*{=} \VAR{foo} \Op{\LKWD*{then}
1178 \VAR{bar}\DF{\VAR{foo}}}}
1180 Bind \VAR{var} in the first iteration to \VAR{foo} and later to \VAR{bar}.
1183 \IT{\LKWD*{across} \VAR{vector}}
1185 Bind \VAR{var} to successive elements of \VAR{vector}.
1188 \IT{\LKWD*{being} \Goo{\LKWD*{the}\XOR\LKWD*{each}}}
1190 Iterate over a hash table or a package.
1193 \begin{LIST}{.5cm}
1195 \IT{\Goo{\LKWD*{hash-key}\XOR\LKWD*{hash-keys}} \Goo{\LKWD*{of}\XOR\LKWD*{in}} \VAR{hash-table}
1196 \Op{\LKWD*{using} (\LKWD*{hash-value} \VAR{value})}}
1198 Bind \VAR{var} successively to the keys of \VAR{hash-table}; bind \VAR{value} to corresponding values.
1201 \IT{\Goo{\LKWD*{hash-value}\XOR\LKWD*{hash-values}} \Goo{\LKWD*{of}\XOR\LKWD*{in}} \VAR{hash-table}
1202 \Op{\LKWD*{using} (\LKWD*{hash-key} \VAR{key})}}
1204 Bind \VAR{var} successively to the values of \VAR{hash-table}; bind \VAR{key} to corresponding keys.
1207 \IT{\Goo{\LKWD*{symbol}\XOR\LKWD*{symbols}\XOR\LKWD*{present-symbol}\XOR\LKWD*{present-symbols}\XOR\LKWD*{external-symbol}\XOR\LKWD*{external-symbols}}
1208 \Op{\Goo{\LKWD*{of}\XOR\LKWD*{in}}
1209 \VAR{package}\DF{\V{\A package\A}}}}
1211 Bind \VAR{var} successively to the accessible symbols, or the present
1212 symbols, or the external symbols respectively, of
1213 \VAR{package}.
1216 \end{LIST}
1217 \end{LIST}
1219 \IT{\Goo{\LKWD*{do}\XOR\LKWD*{doing}} \RP{\VAR{form}}}
1221 Evaluate \VAR{form}s in every iteration.
1224 \IT{\LKWD*{it}}
1226 Value of \VAR{test} form of an enclosing \LKWD{if},
1227 \LKWD{when}, or \LKWD{unless} clause.
1230 \IT{\LKWD*{return} \Goo{\VAR{form}\XOR\LKWD*{it}}}
1232 Return immediately, skipping any \LKWD{finally} parts, with values of \VAR{form} or \LKWD{it}.
1235 \IT{\Goo{\LKWD*{collect}\XOR\LKWD*{collecting}}
1236 \Goo{\VAR{form}\XOR\LKWD*{it}} \Op{\LKWD*{into} \VAR{list}}}
1238 Collect values of \VAR{form} or \LKWD{it} into \VAR{list}. If no
1239 \VAR{list} is given, collect into an anonymous list which is
1240 returned after termination.
1243 \IT{\Goo{\LKWD*{append}\XOR\LKWD*{appending}\XOR\LKWD*{nconc}\XOR\LKWD*{nconcing}}
1244 \Goo{\VAR{form}\XOR\LKWD*{it}} \Op{\LKWD*{into}
1245 \VAR{list}}}
1247 Concatenate values of \VAR{form} or \LKWD{it}, which should be
1248 lists, into \VAR{list} by the means of \FU{append} or \FU{nconc},
1249 respectively. If no \VAR{list} is given, collect into an
1250 anonymous list which is returned after termination.
1253 \IT{\Goo{\LKWD*{count}\XOR\LKWD*{counting}}
1254 \Goo{\VAR{form}\XOR\LKWD*{it}} \Op{\LKWD*{into}
1255 \VAR{n}} \Op{\VAR{type}}}
1257 Count the number of times the value of \VAR{form} or of \LKWD{it} is \T.
1258 If no \VAR{n} is given, count into an anonymous variable
1259 which is returned after termination.
1262 \IT{\Goo{\LKWD*{sum}\XOR\LKWD*{summing}}
1263 \Goo{\VAR{form}\XOR\LKWD*{it}} \Op{\LKWD*{into}
1264 \VAR{sum}} \Op{\VAR{type}}}
1266 Calculate the sum of the primary values of \VAR{form} or of \LKWD{it}.
1267 If no \VAR{sum} is given, sum into an anonymous variable
1268 which is returned after termination.
1271 \IT{\Goo{\LKWD*{maximize}\XOR\LKWD*{maximizing}\XOR
1272 \LKWD*{minimize}\XOR
1273 \LKWD*{minimizing}} \Goo{\VAR{form}\XOR\LKWD*{it}} \Op{\LKWD*{into}
1274 \VAR{max-min}} \Op{\VAR{type}}}
1276 Determine the maximum or minimum, respectively, of the primary values of
1277 \VAR{form} or of \LKWD{it}.
1278 If no \VAR{max-min} is given, use an anonymous variable
1279 which is returned after termination.
1282 \IT{\Goo{\LKWD*{if}\XOR\LKWD*{when}\XOR\LKWD*{unless}} \VAR{ test}
1283 \VAR{i-form} \Goos{\LKWD*{and}
1284 \VAR{j-form}} \Op{\LKWD*{else} \VAR{k-form} \Goos{\LKWD*{and}
1285 \VAR{l-form}}} \Op{\LKWD*{end}}}
1287 If \VAR{test} returns \T, \T, or \NIL, respectively, evaluate
1288 \VAR{i-form} and \VAR{j-form}s; otherwise, evaluate \VAR{k-form}
1289 and \VAR{l-form}s. Inside \VAR{i-form} and \VAR{k-form}, the value
1290 of \VAR{test} is accessible by \LKWD*{it}.
1293 \IT{\LKWD*{repeat} \VAR{num}}
1295 Terminate \MC{loop} after \VAR{num} iterations; \VAR{num} is evaluated once.
1298 \IT{\Goo{\LKWD*{while}\XOR\LKWD*{until}} \VAR{test}}
1300 Continue iteration until \VAR{test} returns \NIL\ or \T, respectively.
1303 \IT{\Goo{\LKWD*{always}\XOR\LKWD*{never}} \VAR{test}}
1305 Terminate \MC{loop} returning \NIL\ and skipping any
1306 \LKWD{finally} parts as soon as \VAR{test} is \NIL\ or \T,
1307 respectively. Otherwise continue \MC{loop} with its default return
1308 value set to \T.
1311 \IT{\LKWD*{thereis} \VAR{test}}
1313 Terminate \MC{loop} when \VAR{test} is \T\ and return value of
1314 \VAR{test}, skipping any \LKWD{finally} parts. Otherwise continue
1315 \MC{loop} with its default return value set to \NIL.
1318 \IT{\LKWD*{loop-finish}}
1320 Terminate \MC{loop} immediately executing any \LKWD{finally}
1321 clauses and returning any accumulated results.
1323 \end{LIST}
1324 \end{LIST}
1329 % LocalWords: pt
1331 %%% Local Variables:
1332 %%% mode: latex
1333 %%% TeX-master: "clqr"
1334 %%% End: