Nyquist / XLISP 2.0 - Contents | Tutorials | Examples | Reference

# cl:multiple-value-list

The cl:multiple-value-list macro evaluates a Lisp expression and returns all values in a list:

(cl:multiple-value-list expr)
  expr - an arbitrary Lisp expression
  returns - all values in a list

    (defmacro cl:multiple-value-list (expr)
      (setq cl:*multiple-values* nil)
      (let ((result (eval expr)))
        (if cl:*multiple-values*
            '*rslt*
            `(list ,result))))

The cl:multiple-value-list macro first evaluates the expression. If the evaluation returned multiple values, the value of the *rslt* variable is returned, otherwise the normal Lisp return value is returned in a list of one element.

The cl:*multiple-values* variable is T if evaluating the expression returns multiple values and NIL with a normal return value.

Examples:

    (cl:multiple-value-list 1)  => (1)      ; cl:*multiple-values* => NIL
                                            ; *rslt* => [invalid]
    (cl:multiple-value-list
      (+ 1 1))                  => (2)      ; cl:*multiple-values* => NIL
                                            ; *rslt* => [invalid]
    (cl:multiple-value-list
      (cl:values 1 2 3))        => (1 2 3)  ; cl:*multiple-values* => T
                                            ; *rslt* => (1 2 3)

Back to top

Nyquist / XLISP 2.0 - Contents | Tutorials | Examples | Reference