Variable *, **, ***

Value Type:

an object.

Initial Value:

implementation-dependent.

Description:

20.2.0 7The variables *, **, and *** are maintained by the Lisp read-eval-print loop to save the values of results that are printed each time through the loop.

The value of * is the most recent primary value that was printed, the value of ** is the previous value of *, and the value of *** is the previous value of **.

The values of these variables are not updated when the evaluation of a form is aborted.

If several values are produced, * contains the first value only; * contains nil if zero values are produced.

This is very muddled. -kmp 17-Dec-90 If the evaluation of the variable \misc{+} is aborted for some reason, then the values associated with \misc{*}, \misc{**}, and \misc{***} are not updated; they are updated only if the printing of values is at least begun (though not necessarily completed).

The values of *, **, and *** are updated immediately prior to printing the return value of a top-level form by the Lisp read-eval-print loop. If the evaluation of such a form is aborted prior to its normal return, the values of *, **, and *** are not updated.

Examples:

(values 'a1 'a2) → A1, A2
'b → B
(values 'c1 'c2 'c3) → C1, C2, C3
(list * ** ***) → (C1 B A1)

(defun cube-root (x) (expt x 1/3)) → CUBE-ROOT
(compile *) → CUBE-ROOT
(setq a (cube-root 27.0)) → 3.0
(* * 9.0) → 27.0

Affected By:

Lisp read-eval-print loop.

See Also:

- (variable), + (variable), / (variable), Section 25.1.1 (Top level loop)

Notes:

 *   ≡ (car /)
 **  ≡ (car //)
 *** ≡ (car ///)