shiftf: return one value, not all of them

Signed-off-by: Daniel Kochmański <daniel@turtleware.eu>
This commit is contained in:
Daniel Kochmański 2015-08-19 17:46:02 +02:00
parent 3825356c32
commit f27a1dbf43

View file

@ -473,7 +473,7 @@ into STORES. Finally inside bindings it expands STORE-FORMS."
;;; SHIFTF macro.
(defmacro shiftf (&environment env &rest args)
"Syntax: (shiftf {place}+ form)
"Syntax: (shiftf {place}+ form)
Saves the values of PLACE and FORM, and then assigns the value of each PLACE
to the PLACE on its left. The rightmost PLACE gets the value of FORM.
Returns the original value of the leftmost PLACE."
@ -481,7 +481,7 @@ Returns the original value of the leftmost PLACE."
((butlast args) env)
(with-expansion-setter (thunk store-forms)
`(let* ,(reduce #'append pairs)
(multiple-value-prog1 ,(car access-forms)
(prog1 ,(car access-forms)
,@(thunk stores
(append (cdr access-forms)
(last args))))))))
@ -496,10 +496,10 @@ PLACE. Returns NIL."
(args env)
(with-expansion-setter (thunk store-forms)
`(let* ,(reduce #'append pairs)
,@(thunk stores
(append (cdr access-forms)
(list (car access-forms))))
nil))))
(prog1 nil
,@(thunk stores
(append (cdr access-forms)
(list (car access-forms)))))))))
;;; DEFINE-MODIFY-MACRO macro, by Bruno Haible.
(defmacro define-modify-macro (name lambdalist function &optional docstring)