1 % Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2018
4 % Permission is granted to copy, distribute and/or modify this
5 % document under the terms of the GNU Free Documentation License,
6 % Version 1.2; 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
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 \FU{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
\FU{equalp
} elements.
51 \IT{(
\FU*
{NOT
} \VAR{foo
})
\qquad\qquad\qquad}
53 \retval{\T} if
\VAR{foo
} is
\NIL;
\retval{\NIL} otherwise.
56 \IT{(
\FU*
{BOUNDP
} \VAR{symbol
})
\qquad\qquad}
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
})
\qquad\qquad}
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.
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 \subsection{Variables
}
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
102 \IT{(
\xorGOO{\MC*
{SETF
}\\
103 \MC*
{PSETF
}}{\
}} \Goos{\VAR{place
}
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
}
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 \IT{(
\SO*
{PROGV
} \VAR{symbols
} \VAR{values
} \PROGN{\VAR{form
}})
}
176 Evaluate
\VAR{form
}s with locally established dynamic bindings of
177 \VAR{symbols
} to
\VAR{values
} or
\NIL. Return
\retval{values of
185 (
\VAR{name
}\Op{\VAR{value
}\DF{\NIL}})
}{\
}^
{\!\!*
}})
186 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
189 Evaluate
\VAR{form
}s with
\VAR{name
}s lexically bound (in parallel or
190 sequentially, respectively) to
\VAR{value
}s. Return
191 \retval{values of
\VAR{form
}s
}.
194 \IT{(
\MC*
{MULTIPLE-VALUE-BIND
} (
\OPn{\NEV{\VAR{var
}}})
\VAR{values-form
}
195 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
} \PROGN{\VAR{body-form
}})
}
197 Evaluate
\VAR{body-form
}s with
\VAR{var
}s lexically bound to the
198 return values of
\VAR{values-form
}. Return
\retval{values of
202 \IT{(
\MC*
{DESTRUCTURING-BIND
} \VAR{destruct-$
\lambda$
} \VAR{bar
}
204 \OPn{\NEV{\VAR{decl
}}})
} \PROGN{\VAR{form
}})
}
206 Evaluate
\VAR{form
}s with variables from tree
207 \VAR{destruct-$
\lambda$
} bound to corresponding elements of tree
208 \VAR{bar
}, and return
\retval{their
209 values
}.
\VAR{destruct-$
\lambda$
} resembles
\VAR{macro-$
\lambda$
}
210 (section
\ref{section:Macros
}), but without any
\kwd{\&environment
}
217 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
218 \subsection{Functions
}
219 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
220 \label{section:Functions
}
223 Below, ordinary lambda list (
\OPn{\VAR{ord-$
\lambda$
}}) has the form\\
224 % \VAR{var} referenced from DEFSTRUCT
226 \OP{\kwd{\&optional
} \xorGOO{%
228 (
\VAR{var
} \OP{\VAR{init
}\DF{\NIL}\text{ } \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}}
230 \Op{\kwd{\&rest
} \VAR{var
}}
232 \OP{\kwd{\&key
} \xorGOO{%
236 (
\kwd{:
}\VAR{key
} \VAR{var
})
}{\
}}
237 \text{ }\OP{\VAR{init
}\DF{\NIL}\text{ }\Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}
239 \Op{\kwd{\&allow-other-keys
}}}
241 \OP{\kwd{\&aux
} \xorGOO{%
243 (
\VAR{var
} \Op{\VAR{init
}\DF{\NIL}})
}{\
}^
{\!\!*
}}}).
245 \VAR{supplied-p
} is
\T\ if there is a corresponding
246 argument.
\VAR{init
} forms can refer to any
\VAR{init
} and
247 \VAR{supplied-p
} to their left.
251 \IT{(
\xorGOO{\MC*
{DEFUN
}\xorGOO{\VAR{foo
}(
\VAR{\OPn{ord-$
\lambda$
}})\\
252 (
\kwd{setf
} \VAR{ foo
})
\text{ }(
\VAR{new-value
} \VAR{\OPn{ord-$
\lambda$
}})
}{.
}\\
253 \MC*
{LAMBDA
}(
\VAR{\OPn{ord-$
\lambda$
}})
}{\
}}
255 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}\\
259 Define a function named
\retval{\VAR{foo
}} or
\retval{(
\kwd{setf
}
260 \VAR{foo
})
}, or an anonymous
\retval{function
}, respectively, which applies
261 \VAR{form
}s to
\VAR{ord-$
\lambda$
}s. For
\MC{defun
},
\VAR{form
}s are
262 enclosed in an implicit
\SO{block
} named
\VAR{foo
}.
265 \IT{(
\xorGOO{\SO*
{FLET
}\\
267 (
\OPn{(
\xorGOO{\VAR{foo
}(
\OPn{\VAR{ord-$
\lambda$
}})\\
268 (
\kwd{setf
} \VAR{ foo
})
\text{ }(
\VAR{new-value
}\OPn{\VAR{ord-$
\lambda$
}})
}{\
}}
270 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{local-decl
}}})
}\\
272 \PROGN{\VAR{local-form
}})
})
273 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
276 Evaluate
\VAR{form
}s with
277 locally defined functions
\VAR{foo
}. Globally defined functions of
278 the same name are shadowed. Each
\VAR{foo
} is also the name of an
279 implicit
\SO{block
} around its corresponding
\OPn{\VAR{local-form
}}.
280 Only for
\SO{LABELS
}, functions
\VAR{foo
} are visible inside
281 \VAR{local-forms
}. Return
\retval{values of
\VAR{form
}s
}.
284 \IT{(
\SO*
{FUNCTION
} \xorGOO{%
286 (
\MC{lambda
} \OPn{\VAR{form
}})
}{\
}})
}
288 Return lexically innermost
\retval{function
} named
\VAR{foo
} or a
289 lexical closure of the
\retval{\MC{lambda
} expression
}.
292 \IT{(
\FU*
{APPLY
} \xorGOO{\VAR{function
}\\
293 (
\kwd{setf
} \VAR{function
})
}{\
}} \OPn{\VAR{arg
}} \VAR{args
})
}
295 \retval{Values of
\VAR{function
}} called with
296 \VAR{arg
}s and the list elements of
\VAR{args
}.
\kwd{setf
}able if
297 \VAR{function
} is one of
\FU{aref
},
\FU{bit
}, and
\FU{sbit
}.
300 \IT{(
\FU*
{FUNCALL
} \VAR{function
} \OPn{arg
})
}
302 \retval{Values of
\VAR{function
}} called with
\VAR{arg
}s.
305 \IT{(
\SO*
{MULTIPLE-VALUE-CALL
} \VAR{function
} \OPn{\VAR{form
}})
}
307 Call
\VAR{function
} with all the values of each
\VAR{form
} as its
308 arguments. Return
\retval{values returned by
\VAR{function
}}.
311 \IT{(
\FU*
{VALUES-LIST
} \VAR{list
})
}
313 Return
\retval{elements of
\VAR{list
}}.
316 \IT{(
\FU*
{VALUES
} \OPn{\VAR{foo
}})
}
318 Return as multiple values the
\retval{primary values
} of the
319 \VAR{foo
}s.
\kwd{setf
}able.
322 \IT{(
\FU*
{MULTIPLE-VALUE-LIST
} \VAR{form
})
}
324 \retval{List of the values of
\VAR{form
}}.
327 \IT{(
\MC*
{NTH-VALUE
} \VAR{n
} \VAR{form
})
}
329 Zero-indexed
\retval{\VAR{n
}th return value
} of
\VAR{form
}.
332 \IT{(
\FU*
{COMPLEMENT
} \VAR{function
})
}
334 Return
\retval{new function
} with same arguments and same side effects
335 as
\VAR{function
}, but with complementary truth value.
338 \IT{(
\FU*
{CONSTANTLY
} \VAR{foo
})
}
340 \retval{Function
} of any number of arguments returning
\VAR{foo
}.
343 \IT{(
\FU*
{IDENTITY
} \VAR{foo
})
}
345 Return
\retval{\VAR{foo
}}.
348 \IT{(
\FU*
{FUNCTION-LAMBDA-EXPRESSION
} \VAR{function
})
}
350 If available, return
\retval{lambda expression
} of
\VAR{function
},
351 \retvalii{\NIL} if
\VAR{function
} was defined in an environment
352 without bindings, and
\retvaliii{name
} of
\VAR{function
}.
355 \IT{(
\FU*
{FDEFINITION
} \xorGOO{\VAR{foo
}\\
356 (
\kwd{setf
} \VAR{foo
})
}{\
}})
}
358 \retval{Definition
} of global function
\VAR{foo
}.
\kwd{setf
}able.
361 \IT{(
\FU*
{FMAKUNBOUND
} \VAR{foo
})
}
363 Remove global function or macro definition
\retval{\VAR{foo
}}.
366 \IT{\arrGOO{\CNS*
{CALL-ARGUMENTS-LIMIT
}\\
367 \CNS*
{LAMBDA-PARAMETERS-LIMIT
}}{.
}}
369 Upper bound of the number of function arguments or lambda list
370 parameters, respectively; $
\geq50$.
373 \IT{\CNS*
{MULTIPLE-VALUES-LIMIT
}}
375 Upper bound of the number of values a multiple value can have;
382 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
384 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
385 \label{section:Macros
}
388 Below, macro lambda list (
\OPn{\VAR{macro-$
\lambda$
}}) has the form of
391 (
\Op{\kwd{\&whole
} \VAR{var
}}
397 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}^
{\!\!*
}}
406 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}}\text{ }
407 \OP{\VAR{init
}\DF{\NIL}\text{ } \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}}
417 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}}}
426 (
\kwd{:
}\VAR{key
} \xorGOO{%
428 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}})
}{\
}}
429 \text{ }\OP{\VAR{init
}\DF{\NIL}\text{ } \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}
431 \Op{\kwd{\&allow-other-keys
}}}
436 (
\VAR{var
} \Op{\VAR{init
}\DF{\NIL}})
}{\
}^
{\!\!*
}}}
450 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}^
{\!\!*
}}
459 (
\OPn{\VAR{macro-$
\lambda$
}})
}{\
}}\text{ }
460 \OP{\VAR{init
}\DF{\NIL}\text{ } \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}}
467 One toplevel
\Op{\VAR{E
}} may be replaced by
\kwd{\&environment
}
468 \VAR{var
}.
\VAR{supplied-p
} is
\T\ if there is a corresponding
469 argument.
\VAR{init
} forms can refer to any
\VAR{init
} and
470 \VAR{supplied-p
} to their left.
474 \IT{(
\xorGOO{\MC*
{DEFMACRO
}\\
475 \MC*
{DEFINE-COMPILER-MACRO
}}{\
}}
477 (
\kwd{setf
} \VAR{foo
})
}{\
}}
478 (
\OPn{\VAR{macro-$
\lambda$
}})
480 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}\\
484 Define macro
\retval{\VAR{foo
}} which on evaluation as (
\VAR{foo
}
485 \VAR{tree
}) applies expanded
\VAR{form
}s to arguments from
486 \VAR{tree
}, which corresponds to
\VAR{tree
}-shaped
487 \VAR{macro-$
\lambda$
}s.
\VAR{form
}s are enclosed in an implicit
488 \SO{block
} named
\VAR{foo
}.
491 \IT{(
\MC*
{DEFINE-SYMBOL-MACRO
} \VAR{foo
} \VAR{form
})
}
493 Define symbol macro
\retval{\VAR{foo
}} which on evaluation
494 evaluates expanded
\VAR{form
}.
497 \IT{(
\SO*
{MACROLET
} (
\OPn{(
\VAR{foo
} (
\OPn{\VAR{macro-$
\lambda$
}})
499 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{local-decl
}}})
}\\
500 \NEV{\VAR{doc
}}}{\
}} \PROGN{\VAR{macro-form
}})
})
502 \OPn{\NEV{\VAR{decl
}}})
} \PROGN{\VAR{form
}})
}
504 Evaluate
\retval{\VAR{form
}s
} with locally defined mutually
505 invisible macros
\VAR{foo
} which are enclosed in implicit
506 \SO{block
}s of the same name.
509 \IT{(
\SO*
{SYMBOL-MACROLET
} (
\OPn{(
\VAR{foo
}
510 \VAR{expansion-form
})
})
\OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
513 Evaluate
\retval{\VAR{form
}s
} with locally defined symbol macros
517 \IT{(
\MC*
{DEFSETF
} \NEV{\VAR{function
}} \xorGOO{%
518 \NEV{\VAR{updater
}} \text{ } \Op{\NEV{\VAR{doc
}}}\\
519 (
\OPn{\VAR{setf-$
\lambda$
}})
\text{ } (
\OPn{\VAR{s-var
}})
\text{ }
521 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}\\
523 \text{ } \PROGN{\VAR{form
}}}{\
}})
525 where defsetf lambda list (
\OPn{\VAR{setf-$
\lambda$
}}) has the form
528 \OP{\kwd{\&optional
} \xorGOO{%
530 (
\VAR{var
} \OP{\VAR{init
}\DF{\NIL}\text{ } \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}}
532 \Op{\kwd{\&rest
} \VAR{var
}}
534 \OP{\kwd{\&key
} \xorGOO{%
538 (
\kwd{:
}\VAR{key
} \VAR{var
})
}{\
}}
539 \text{ }\OP{\VAR{init
}\DF{\NIL}\text{ }\Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}
541 \Op{\kwd{\&allow-other-keys
}}}
543 \OP{\kwd{\&environment
} \VAR{var
}}%
547 Specify how to
\kwd{setf
} a place accessed by
548 \retval{\VAR{function
}}.
549 \EM{Short form:
} (
\kwd{setf
} (
\VAR{function
} \OPn{\VAR{arg
}})
\VAR{value-form
}) is
550 replaced by (
\VAR{updater
} \OPn{\VAR{arg
}} \VAR{value-form
}); the
551 latter must return
\VAR{value-form
}.
552 \EM{Long form:
} on invocation of (
\kwd{setf
} (
\VAR{function
}
553 \OPn{\VAR{arg
}})
\VAR{value-form
}),
\VAR{form
}s must expand
554 into code that sets the place accessed where
\VAR{setf-$
\lambda$
}
555 and
\OPn{\VAR{s-var
}} describe the arguments of
\VAR{function
} and
556 the value(s) to be stored, respectively; and that returns
557 the value(s) of
\OPn{\VAR{s-var
}}.
\VAR{form
}s are enclosed in an
558 implicit
\SO{block
} named
\VAR{function
}.
561 \IT{(
\MC*
{DEFINE-SETF-EXPANDER
} \VAR{function
}
562 (
\OPn{\VAR{macro-$
\lambda$
}})
564 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}\\
568 Specify how to
\kwd{setf
} a place accessed by
569 \retval{\VAR{function
}}. On invocation of (
\kwd{setf
} (
\VAR{function
}
570 \OPn{\VAR{arg
}})
\VAR{value-form
}),
\OPn{\VAR{form
}} must expand
571 into code returning
\VAR{arg-vars
},
\VAR{args
},
\VAR{newval-vars
},
572 \VAR{set-form
}, and
\VAR{get-form
} as described with
573 \FU{GET-SETF-EXPANSION
} where the elements of macro
574 lambda list
\OPn{\VAR{macro-$
\lambda$
}} are bound to corresponding
575 \VAR{arg
}s.
\VAR{form
}s are enclosed in an implicit
\SO{block
}
576 named
\VAR{function
}.
579 \IT{(
\FU*
{GET-SETF-EXPANSION
} \VAR{place
} \Op{\VAR{environment
}\DF{\NIL}})
}
581 Return lists of temporary variables
\retval{\VAR{arg-vars
}} and of
582 corresponding
\retvalii{\VAR{args
}} as given with
\VAR{place
},
583 list
\retvaliii{\VAR{\VAR{newval-vars
}}} with temporary variables
584 corresponding to the new values, and
\retvaln{4}{\VAR{set-form
}}
585 and
\retvaln{5}{\VAR{get-form
}} specifying in terms of
\VAR{arg-vars
}
586 and
\VAR{newval-vars
} how to
\kwd{setf
} and how to read
590 \IT{(
\MC*
{DEFINE-MODIFY-MACRO
} \VAR{foo
}
591 (
\OP{\kwd{\&optional
} \xorGOO{%
593 (
\VAR{var
} \OP{\VAR{init
}\DF{\NIL}\text{ }
594 \Op{\VAR{supplied-p
}}})
}{\
}^
{\!\!*
}}}
595 \Op{\kwd{\&rest
} \VAR{var
}})
596 \VAR{function
} \Op{\NEV{\VAR{doc
}}})
}
598 Define macro
\retval{\VAR{foo
}} able to modify a place. On
599 invocation of (
\VAR{foo
} \VAR{place
} \OPn{\VAR{arg
}}), the value of
600 \VAR{function
} applied to
\VAR{place
} and
\VAR{arg
}s will be
601 stored into
\VAR{place
} and returned.
604 \IT{\CNS*
{LAMBDA-LIST-KEYWORDS
}}
605 {List of macro lambda list keywords. These are at least:
609 \IT{\kwd*
{\&whole
} \VAR{var
}}
610 {Bind
\VAR{var
} to the entire macro call form.
}
612 \IT{\kwd*
{\&optional
} \OPn{\VAR{var
}}}
613 {Bind
\VAR{var
}s to corresponding arguments if any.
}
617 \kwd*
{\&body
}} \VAR{var
}}
618 {Bind
\VAR{var
} to a list of remaining arguments.
}
620 \IT{\kwd*
{\&key
} \OPn{\VAR{var
}}}
621 {Bind
\VAR{var
}s to corresponding keyword arguments.
}
623 \IT{\kwd*
{\&allow-other-keys
}}
625 Suppress keyword argument checking. Callers can do so using
626 \kwd*
{:allow-other-keys
}~
\T.
629 \IT{\kwd*
{\&environment
} \VAR{var
}}
630 {Bind
\VAR{var
} to the lexical compilation environment.
}
632 \IT{\kwd*
{\&aux
} \OPn{\VAR{var
}}}
633 {Bind
\VAR{var
}s as in
\SO{let
\A}.
}
639 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
640 \subsection{Control Flow
}
641 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
644 \IT{(
\SO*
{IF
} \VAR{test
} \VAR{then
} \Op{\VAR{else
}\DF{\NIL}})
}
646 Return values of
\retval{\VAR{then
}} if
\VAR{test
} returns
\T;
647 return values of
\retval{\VAR{else
}} otherwise.
650 \IT{(
\MC*
{COND
} \OPn{(
\VAR{test
} \PROGN{\VAR{then
}}\DF{\VAR{test
}})
})
}
652 Return the
\retval{values
} of the first
\OPn{\VAR{then
}} whose
653 \VAR{test
} returns
\T; return
\retval{\NIL} if all
\VAR{test
}s
657 \IT{(
\xorGOO{\MC*
{WHEN
}\\
658 \MC*
{UNLESS
}}{\
}} \VAR{test
}
661 Evaluate
\VAR{foo
}s and return
\retval{their values
} if
\VAR{test
}
662 returns
\T\ or
\NIL, respectively. Return
\retval{\NIL} otherwise.
665 \IT{(
\MC*
{CASE
} \VAR{test
} \OPn{(
\xorGOO{(
\OPn{\NEV{\VAR{key
}}})\\
666 \NEV{\VAR{key
}}}{\
}} \PROGN{\VAR{foo
}})
}
667 \OP{(
\xorGOO{\kwd*
{OTHERWISE
}\\
668 \T}{\
}} \PROGN{\VAR{bar
}})
\DF{\NIL}})
}
670 Return the
\retval{values of the first
\OPn{\VAR{foo
}}} one of
671 whose
\VAR{key
}s is
\kwd{eql
} \VAR{test
}. Return
\retval{values of
672 \VAR{bar
}s
} if there is no matching
\VAR{key
}.
673 % Keep \OPn{\VAR{foo}} instead of the otherwise preferable
674 % \VAR{foo}s because we're talking about one set of foos out
678 \IT{(
\xorGOO{\MC*
{ECASE
}\\
679 \MC*
{CCASE
}}{\
}} \VAR{test
}
680 \OPn{(
\xorGOO{(
\OPn{\NEV{\VAR{key
}}})\\
681 \NEV{\VAR{key
}}}{\
}} \PROGN{\VAR{foo
}})
})
}
683 Return the
\retval{values of the first
\OPn{\VAR{foo
}}} one of
684 whose
\VAR{key
}s is
\kwd{eql
} \VAR{test
}. Signal
685 non-correctable/correctable
\kwd{type-error
} if there is no
687 % Keep \OPn{\VAR{foo}} instead of the otherwise preferable
688 % \VAR{foo}s because we're talking about one set of foos out
692 \IT{(
\MC*
{AND
} \OPn{\VAR{form
}}\DF{\T})
}
694 Evaluate
\VAR{form
}s from left to right. Immediately return
695 \retval{\NIL} if one
\VAR{form
}'s value is
\NIL. Return
696 \retval{values of last
\VAR{form
}} otherwise.
699 \IT{(
\MC*
{OR
} \OPn{\VAR{form
}}\DF{\NIL})
}
701 Evaluate
\VAR{form
}s from left to
702 right. Immediately return
\retval{primary value
} of first
703 non-
\NIL-evaluating form, or
\retval{all values
} if last
\VAR{form
}
704 is reached. Return
\retval{\NIL} if no
\VAR{form
} returns
\T.
707 \IT{(
\SO*
{PROGN
} \OPn{\VAR{form
}}\DF{\NIL})
}
709 Evaluate
\VAR{form
}s sequentially. Return
710 \retval{values of last
\VAR{form
}}.
714 (
\SO*
{MULTIPLE-VALUE-PROG1
} \VAR{ form-r
} \OPn{\VAR{ form
}})\\
715 (
\MC*
{PROG1
} \VAR{ form-r
} \OPn{\VAR{ form
}})\\
716 (
\MC*
{PROG2
} \VAR{ form-a
} \VAR{ form-r
} \OPn{\VAR{ form
}})
}{.
}}
718 Evaluate forms in order. Return
\retval{values/primary value
},
719 respectively, of
\VAR{form-r
}.
722 \IT{(
\xorGOO{\MC*
{PROG
}\\
726 (
\VAR{name
} \Op{\VAR{value
}\DF{\NIL}})
}{\
}^
{\!\!*
}})
727 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
728 \xorGOO{\NEV{\VAR{tag
}}\\
\VAR{form
}}{\
}^
{\!\!*
}})
}
730 Evaluate
\SO{TAGBODY
}-like body with
\VAR{name
}s lexically bound (in
731 parallel or sequentially, respectively) to
\VAR{value
}s. Return
732 \retval{\NIL} or explicitly
\retval{\MC{return
}ed values
}.
733 Implicitly, the whole form is a
\SO{block
} named
\NIL.
736 \IT{(
\SO*
{UNWIND-PROTECT
} \VAR{protected
} \OPn{\VAR{cleanup
}})
}
738 Evaluate
\VAR{protected
} and then, no matter how control leaves
739 \VAR{protected
},
\VAR{cleanup
}s. Return
\retval{values of
743 \IT{(
\SO*
{BLOCK
} \VAR{name
} \PROGN{\VAR{form
}})
}
745 Evaluate
\VAR{form
}s in a lexical environment, and
746 return
\retval{their values
} unless interrupted by
750 \IT{\arrGOO{(
\SO*
{RETURN-FROM
} \VAR{foo
} \Op{\VAR{result
}\DF{\NIL}})\\
751 (
\MC*
{RETURN
} \Op{\VAR{result
}\DF{\NIL}})
}{.
}}
753 Have nearest enclosing
\SO{block
} named
\VAR{foo
}/named
\NIL,
754 respectively, return with values of
\VAR{result
}.
757 \IT{(
\SO*
{TAGBODY
} \Goos{\NEV{\VAR{tag
}}\XOR\VAR{form
}})
}
759 Evaluate
\VAR{form
}s in a lexical environment.
\VAR{tag
}s (symbols
760 or integers) have lexical scope and dynamic extent, and are
761 targets for
\SO{GO
}. Return
\retval{\NIL}.
764 \IT{(
\SO*
{GO
} \NEV{\VAR{tag
}})
}
766 Within the innermost possible enclosing
\SO{tagbody
}, jump to a
767 tag
\FU{eql
} \VAR{tag
}.
770 \IT{(
\SO*
{CATCH
} \VAR{tag
} \PROGN{\VAR{form
}})
}
772 Evaluate
\VAR{form
}s and return
\retval{their values
} unless
773 interrupted by
\SO{THROW
}.
776 \IT{(
\SO*
{THROW
} \VAR{tag
} \VAR{form
})
}
778 Have the nearest dynamically
779 enclosing
\SO{CATCH
} with a tag
\FU{eq
} \VAR{tag
} return with the
780 values of
\VAR{form
}.
783 \IT{(
\FU*
{SLEEP
} \VAR{n
})
}
785 Wait
\VAR{n
} seconds; return
\retval{\NIL}.
791 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
792 \subsection{Iteration
}
793 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
797 \IT{(
\xorGOO{\MC*
{DO
}\\
801 (
\VAR{var
} \OP{ \VAR{start
} \Op{\VAR{step
}}})
}{\
}^
{\!\!*
}})
802 (
\VAR{stop
} \PROGN{\VAR{result
}})
803 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
804 \xorGOO{\NEV{\VAR{tag
}}\\
\VAR{form
}}{\
}^
{\!\!*
}})
}
806 Evaluate
\SO{TAGBODY
}-like body with
\VAR{var
}s successively bound
807 according to the values of the corresponding
\VAR{start
} and
808 \VAR{step
} forms.
\VAR{var
}s are bound in parallel/sequentially,
809 respectively. Stop iteration when
\VAR{stop
} is
\T. Return
810 \retval{values of
\OPn{\VAR{result
}}}. Implicitly, the whole form
811 is a
\SO{block
} named
\NIL.
814 \IT{(
\MC*
{DOTIMES
} (
\VAR{var
} \VAR{i
} \Op{\VAR{result
}\DF{\NIL}})
815 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
816 \Goos{\NEV{\VAR{tag
}}\XOR\VAR{form
}})
}
818 Evaluate
\SO{TAGBODY
}-like body with
\VAR{var
} successively bound
819 to integers from
0 to $i -
1$. Upon evaluation of
820 \retval{\VAR{result
}},
\VAR{var
} is
\VAR{i
}. Implicitly, the whole
821 form is a
\SO{block
} named
\NIL.
824 \IT{(
\MC*
{DOLIST
}(
\VAR{var
} \VAR{list
} \Op{\VAR{result
}\DF{\NIL}})
825 \OPn{(
\kwd{declare
} \OPn{\NEV{\VAR{decl
}}})
}
826 \Goos{\NEV{\VAR{tag
}}\XOR\VAR{form
}})
}
828 Evaluate
\SO{TAGBODY
}-like body with
\VAR{var
} successively bound
829 to the elements of
\VAR{list
}. Upon evaluation of
830 \retval{\VAR{result
}},
\VAR{var
} is
\NIL. Implicitly, the whole form
831 is a
\SO{block
} named
\NIL.
837 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
838 \subsection{Loop Facility
}
839 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
840 \label{section:Loop Facility
}
844 \IT{(
\MC*
{LOOP
} \OPn{\VAR{form
}})
}
846 \EM{Simple Loop.
} If
\VAR{form
}s do not contain any atomic Loop
847 Facility keywords, evaluate them forever in an implicit
\SO{block
}
851 \IT{(
\MC*
{LOOP
} \OPn{\VAR{clause
}})
}
853 \EM{Loop Facility.
} For Loop Facility keywords
854 see below and Figure
\ref{loop-overview
}.
859 \IT{\LKWD*
{named
} \VAR{n
}\DF{\NIL}}
861 Give
\MC{loop
}'s implicit
\SO{block
} a name.
864 \IT{\Goop{\LKWD*
{with
}
867 (
\OPn{\VAR{var-s
}})
}{\
}}
869 \Op{\LKWD*
{=
} \VAR{foo
}}}
873 (
\OPn{\VAR{var-p
}})
}{\
}}
875 \Op{\LKWD*
{=
} \VAR{bar
}}}
877 where destructuring type specifier
\VAR{d-type
} has the form
879 \GOO{\kwd{fixnum
}\XOR
886 (
\OPn{\VAR{type
}})
}{\
}}}}
889 Initialize (possibly trees of) local variables
\VAR{var-s
}
890 sequentially and
\VAR{var-p
} in parallel.
899 \text{\kwd{loop
}}\text{ }
901 \text{\LKWD{named
} \VAR{n
}\DF{\NIL}}
908 (
\OPn{\VAR{var
}})
}{\
}}
910 \Op{\LKWD{=
} \VAR{foo
}}}
915 (
\OPn{\VAR{var
}})
}{\
}}
917 \Op{\LKWD{=
} \VAR{bar
}}}\
}^
{*
} \\ \\
[-
2.4ex
]
926 (
\OPn{\VAR{var
}})
}{\
}}}%
935 \text{\LKWD{upfrom
}}\\
939 \text{\VAR{start
}\DF{\LIT{0}}}
951 \text{\LKWD{from
} \VAR{start
}}
954 \text{\LKWD{downto
}}\\
959 \text{\LKWD{downfrom
} \VAR{start
}}\text{ }
963 \text{\LKWD{downto
}}\\
973 \text{\LKWD{by
} \VAR{step
}\DF{\LIT{1}}}
981 \text{\VAR{list
}}\text{ }
983 \text{\LKWD{by
} \VAR{function
}\DF{\kwd{\#'cdr
}}}
985 \text{\LKWD{=
} \VAR{foo
}}
987 \text{\LKWD{then
} \VAR{bar
}\DF{\VAR{foo
}}}
989 \text{\LKWD{across
} \VAR{vector
}}\\
1001 \text{\LKWD{hash-key
\Op{s
}}}
1010 \text{\LKWD{using
} (
\LKWD{hash-value
} \VAR{v
})
}%
1012 \text{\LKWD{hash-value
\Op{s
}}}
1021 \text{\LKWD{using
} (
\LKWD{hash-key
} \VAR{k
})
}%
1027 \text{\LKWD{symbol
\Op{s
}}}\\
1028 \text{\LKWD{present-symbol
\Op{s
}}}\\
1029 \text{\LKWD{external-symbol
\Op{s
}}}
1038 \right\
} \text{\VAR{package
}\DF{\V{\A package
\A}}}%
1043 \right\
}_
{{}^
{{}^
{\displaystyle{\mathbb{F
}_0
}}}}
1046 \text{\LKWD{and
} }\boxed{\mathbb{F
}_i\!
}
1049 \boxed{\;
\mathbb{T
}_1\,
}
1052 \right\
}^
{\displaystyle{\!\!*
}}
1059 \text{\LKWD{do
\Op{ing
}}}
1060 \text{ \VAR{form
}}^
{+
}\\
1064 \text{\LKWD{when
}}\\
1065 \text{\LKWD{unless
}}
1069 \boxed{\mathbb{C
}_i\!
}\
{\text{\LKWD{and
}}\,
1070 \boxed{\mathbb{C
}_j\!
}\
}^
{*
}\Op{\text{\LKWD{else
}}\,
1071 \boxed{\mathbb{C
}_k\!
}\
{\text{\LKWD{and
}}\,
1072 \boxed{\mathbb{C
}_l\!
}\
}^
{*
}}
1073 \Op{\text{\LKWD{end
}}}\!\!\!\!\!\!\!\\
1074 \text{\LKWD{return
}}
1083 \text{\LKWD{collect
\Op{ing
}}}\\
1084 \text{\LKWD{append
\Op{ing
}}}\\
1085 \text{\LKWD{nconc
\Op{ing
}}}
1093 \right\
} \Op{\text{\LKWD{into
}\VAR{list
}}}\\
1096 \text{\LKWD{count
\Op{ing
}}}\\
1097 \text{\LKWD{sum
\Op{ming
}}}\\
1098 \text{\LKWD{maximize
}}\\
1099 \text{\LKWD{maximizing
}}\\
1100 \text{\LKWD{minimize
}}\\
1101 \text{\LKWD{minimizing
}}
1110 \Op{\text{\LKWD{into
}\VAR{num
}}}\text{ }
1111 \Op{\text{\VAR{type
}}}
1113 \right._
{{}^
{{}^
{\!\!\!\!
\displaystyle{\mathbb{C
}_0
}}}}
1122 \text{\LKWD{initially
}} \\
1123 \text{\LKWD{finally
}}
1126 \text{\VAR{form
}}^
{+
}\\
1127 \text{\LKWD{repeat
} \VAR{num
}}\\
1130 \text{\LKWD{while
}}\\
1131 \text{\LKWD{until
}}\\
1132 \text{\LKWD{always
}}\\
1133 \text{\LKWD{never
}}\\
1134 \text{\LKWD{thereis
}}
1139 \right._
{{}^
{{}^
{\displaystyle{\mathbb{T
}_2
}}}}
1142 \right\
}^
{\displaystyle{\!\!*
}}
1148 \raisebox{0em
}[0em
][0em
]{\parbox[b
]{4cm
}{\caption{\protect\raggedright Loop Facility, Overview.
\label{loop-overview
}}}}
1151 \IT{\GOop{\Goo{\LKWD*
{for
}\XOR\LKWD*
{as
}}
1154 (
\OPn{\VAR{var-s
}})
}{\
}}
1159 (
\OPn{\VAR{var-p
}})
}{\
}}
1162 Begin of iteration control clauses. Initialize and step (possibly
1163 trees of) local variables
\VAR{var-s
} sequentially and
\VAR{var-p
}
1164 in parallel. Destructuring type specifier
\VAR{d-type
} as with
1170 \IT{\Goo{\LKWD*
{upfrom
}\XOR\LKWD*
{from
}\XOR\LKWD*
{downfrom
}}
1173 Start stepping with
\VAR{start
}
1176 \IT{\Goo{\LKWD*
{upto
}\XOR\LKWD*
{downto
}\XOR\LKWD*
{to
}\XOR\LKWD*
{below
}\XOR\LKWD*
{above
}}
1179 Specify
\VAR{form
} as the end value for stepping.
1182 \IT{\Goo{\LKWD*
{in
}\XOR\LKWD*
{on
}} \VAR{list
}}
1184 Bind
\VAR{var
} to successive elements/tails, respectively, of
1188 \IT{\LKWD*
{by
} \Goo{\VAR{step
}\DF{\LIT{1}}\XOR\VAR{function
}\DF{\kwd{\#'cdr
}}}}
1190 Specify the (positive) decrement or increment or the
1191 \VAR{function
} of one argument returning the next part of the
1195 \IT{\LKWD*
{=
} \VAR{foo
} \Op{\LKWD*
{then
}
1196 \VAR{bar
}\DF{\VAR{foo
}}}}
1198 Bind
\VAR{var
} initially to
\VAR{foo
} and later to
1202 \IT{\LKWD*
{across
} \VAR{vector
}}
1204 Bind
\VAR{var
} to successive elements of
\VAR{vector
}.
1207 \IT{\LKWD*
{being
} \Goo{\LKWD*
{the
}\XOR\LKWD*
{each
}}}
1209 Iterate over a hash table or a package.
1214 \IT{\Goo{\LKWD*
{hash-key
}\XOR\LKWD*
{hash-keys
}}
1215 \Goo{\LKWD*
{of
}\XOR\LKWD*
{in
}} \VAR{hash-table
}
1216 \Op{\LKWD*
{using
} (
\LKWD*
{hash-value
} \VAR{value
})
}}
1218 Bind
\VAR{var
} successively to the keys of
\VAR{hash-table
};
1219 bind
\VAR{value
} to corresponding values.
1222 \IT{\Goo{\LKWD*
{hash-value
}\XOR\LKWD*
{hash-values
}}
1223 \Goo{\LKWD*
{of
}\XOR\LKWD*
{in
}} \VAR{hash-table
}
1224 \Op{\LKWD*
{using
} (
\LKWD*
{hash-key
} \VAR{key
})
}}
1226 Bind
\VAR{var
} successively to the values of
1227 \VAR{hash-table
}; bind
\VAR{key
} to corresponding keys.
1230 \IT{\Goo{\LKWD*
{symbol
}\XOR\LKWD*
{symbols
}\XOR\LKWD*
{present-symbol
}\XOR\LKWD*
{present-symbols
}\XOR\LKWD*
{external-symbol
}\XOR\LKWD*
{external-symbols
}}
1231 \Op{\Goo{\LKWD*
{of
}\XOR\LKWD*
{in
}}
1232 \VAR{package
}\DF{\V{\A package
\A}}}}
1234 Bind
\VAR{var
} successively to the accessible symbols, or
1235 the present symbols, or the external symbols respectively,
1242 \IT{\Goo{\LKWD*
{do
}\XOR\LKWD*
{doing
}} \RP{\VAR{form
}}}
1244 Evaluate
\VAR{form
}s in every iteration.
1247 \IT{\Goo{\LKWD*
{if
}\XOR\LKWD*
{when
}\XOR\LKWD*
{unless
}} \VAR{ test
}
1248 \VAR{i-clause
} \Goos{\LKWD*
{and
}
1249 \VAR{j-clause
}} \Op{\LKWD*
{else
} \VAR{k-clause
} \Goos{\LKWD*
{and
}
1250 \VAR{l-clause
}}} \Op{\LKWD*
{end
}}}
1252 If
\VAR{test
} returns
\T,
\T, or
\NIL, respectively, evaluate
1253 \VAR{i-clause
} and
\VAR{j-clause
}s; otherwise, evaluate
1254 \VAR{k-clause
} and
\VAR{l-clause
}s.
1260 Inside
\VAR{i-clause
} or
\VAR{k-clause
}:
1261 \retval{value of
\VAR{test
}}.
1265 \IT{\LKWD*
{return
} \Goo{\VAR{form
}\XOR\LKWD*
{it
}}}
1267 Return immediately, skipping any
\LKWD{finally
} parts, with
1268 values of
\VAR{form
} or
\LKWD{it
}.
1271 \IT{\Goo{\LKWD*
{collect
}\XOR\LKWD*
{collecting
}}
1272 \Goo{\VAR{form
}\XOR\LKWD*
{it
}} \Op{\LKWD*
{into
} \VAR{list
}}}
1274 Collect values of
\VAR{form
} or
\LKWD{it
} into
\VAR{list
}. If no
1275 \VAR{list
} is given, collect into an anonymous list which is
1276 returned after termination.
1279 \IT{\Goo{\LKWD*
{append
}\XOR\LKWD*
{appending
}\XOR\LKWD*
{nconc
}\XOR\LKWD*
{nconcing
}}
1280 \Goo{\VAR{form
}\XOR\LKWD*
{it
}} \Op{\LKWD*
{into
}
1283 Concatenate values of
\VAR{form
} or
\LKWD{it
}, which should be
1284 lists, into
\VAR{list
} by the means of
\FU{append
} or
\FU{nconc
},
1285 respectively. If no
\VAR{list
} is given, collect into an
1286 anonymous list which is returned after termination.
1289 \IT{\Goo{\LKWD*
{count
}\XOR\LKWD*
{counting
}}
1290 \Goo{\VAR{form
}\XOR\LKWD*
{it
}} \Op{\LKWD*
{into
}
1291 \VAR{n
}} \Op{\VAR{type
}}}
1293 Count the number of times the value of
\VAR{form
} or of
\LKWD{it
} is
\T.
1294 If no
\VAR{n
} is given, count into an anonymous variable
1295 which is returned after termination.
1298 \IT{\Goo{\LKWD*
{sum
}\XOR\LKWD*
{summing
}}
1299 \Goo{\VAR{form
}\XOR\LKWD*
{it
}} \Op{\LKWD*
{into
}
1300 \VAR{sum
}} \Op{\VAR{type
}}}
1302 Calculate the sum of the primary values of
\VAR{form
} or of
\LKWD{it
}.
1303 If no
\VAR{sum
} is given, sum into an anonymous variable
1304 which is returned after termination.
1307 \IT{\Goo{\LKWD*
{maximize
}\XOR\LKWD*
{maximizing
}\XOR
1308 \LKWD*
{minimize
}\XOR
1309 \LKWD*
{minimizing
}} \Goo{\VAR{form
}\XOR\LKWD*
{it
}} \Op{\LKWD*
{into
}
1310 \VAR{max-min
}} \Op{\VAR{type
}}}
1312 Determine the maximum or minimum, respectively, of the primary values of
1313 \VAR{form
} or of
\LKWD{it
}.
1314 If no
\VAR{max-min
} is given, use an anonymous variable
1315 which is returned after termination.
1318 \IT{\Goo{\LKWD*
{initially
}\XOR\LKWD*
{finally
}} \RP{\VAR{form
}}}
1320 Evaluate
\VAR{form
}s before begin, or after end, respectively,
1324 \IT{\LKWD*
{repeat
} \VAR{num
}}
1326 Terminate
\MC{loop
} after
\VAR{num
} iterations;
\VAR{num
} is
1330 \IT{\Goo{\LKWD*
{while
}\XOR\LKWD*
{until
}} \VAR{test
}}
1332 Continue iteration until
\VAR{test
} returns
\NIL\ or
\T,
1336 \IT{\Goo{\LKWD*
{always
}\XOR\LKWD*
{never
}} \VAR{test
}}
1338 Terminate
\MC{loop
} returning
\NIL\ and skipping any
1339 \LKWD{finally
} parts as soon as
\VAR{test
} is
\NIL\ or
\T,
1340 respectively. Otherwise continue
\MC{loop
} with its default
1341 return value set to
\T.
1344 \IT{\LKWD*
{thereis
} \VAR{test
}}
1346 Terminate
\MC{loop
} when
\VAR{test
} is
\T\ and return value of
1347 \VAR{test
}, skipping any
\LKWD{finally
} parts. Otherwise
1348 continue
\MC{loop
} with its default return value set to
\NIL.
1351 \IT{(
\MC*
{loop-finish
})
}
1353 Terminate
\MC{loop
} immediately executing any
\LKWD{finally
}
1354 clauses and returning any accumulated results.
1364 %%% Local Variables:
1366 %%% TeX-master: "clqr"