Function: cl-multiple-value-setq
cl-multiple-value-setq is an autoloaded macro defined in
cl-macs.el.gz.
Signature
(cl-multiple-value-setq (SYM...) FORM)
Documentation
Collect multiple return values.
FORM must return a list; the first N elements of this list are stored in
each of the symbols SYM in turn. This is analogous to the Common Lisp
multiple-value-setq macro, using lists to simulate true multiple return
values. For compatibility, (cl-values A B C) is a synonym for (list A B C).
Aliases
multiple-value-setq (obsolete since 27.1)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-macs.el.gz
;;;###autoload
(defmacro cl-multiple-value-setq (vars form)
"Collect multiple return values.
FORM must return a list; the first N elements of this list are stored in
each of the symbols SYM in turn. This is analogous to the Common Lisp
`multiple-value-setq' macro, using lists to simulate true multiple return
values. For compatibility, (cl-values A B C) is a synonym for (list A B C).
\(fn (SYM...) FORM)"
(declare (indent 1) (debug ((&rest symbolp) form)))
(cond ((null vars) `(progn ,form nil))
((null (cdr vars)) `(setq ,(car vars) (car ,form)))
(t
(let* ((temp (make-symbol "--cl-var--")) (n 0))
`(let ((,temp ,form))
(prog1 (setq ,(pop vars) (car ,temp))
(setq ,@(apply #'nconc
(mapcar (lambda (v)
(list v `(nth ,(setq n (1+ n))
,temp)))
vars)))))))))