[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Keith Price <email@example.com>: &Rest failure]
Date: Wed, 8 May 91 10:59:07 PDT
From: firstname.lastname@example.org (Keith Price)
Does the following behavior make any sense? It doesn't make any sense to me.
We ran the following simple test on the original 8.0 world in order to see if
it was something we did. It behaves the same on a 3650, 3675, 3645. We have
no XL machines.
Basically, &rest does not seem to work on defun. (It works on defmacro.)
This is strange to us since we have many other uses of &rest in defuns that
work, but today no new compiles or definitions seem to work.
Command: (defun test (a &rest b) b)
Command: (test 1 2 3)
(#:TERMINAL-IO-SYN-STREAM NIL #<LOCATIVE 144264073> . #<DTP-COMPILED-FUNCTION (:INTERNAL GPRINT:PRINT-OBJECT 0) 463724053>)
In Book 7: "Symbolics Common Lisp Language Concepts" (Feb. 1990), read
section 10.4.6, "Safety of &rest Arguments". The implementation chosen
is to allocate the &rest list on the stack, and is only validly usable
within the dynamic scope of the function. If you need to return an
&rest arg, copy the list first. Your test function would become:
(defun test (a &rest b) (copy-list b))