On Sat, Dec 7, 2019 at 5:48 AM Richard Stallman wrote: > What does Common Lisp say about the return value of 'push'? From the Common Lisp Hyperspec: *Macro* *PUSH* *Syntax:* *push* *item place* => *new-place-value* *Arguments and Values:* *item*---an *object* <26_glo_o.htm#object>. *place*---a *place* <26_glo_p.htm#place>, the *value* <26_glo_v.htm#value> of which may be any *object* <26_glo_o.htm#object>. *new-place-value*---a *list* <26_glo_l.htm#list> (the new *value* <26_glo_v.htm#value> of *place*). *Description:* *push* <#push> prepends *item* to the *list* <26_glo_l.htm#list> that is stored in *place*, stores the resulting *list* <26_glo_l.htm#list> in *place*, and returns the *list* <26_glo_l.htm#list>. > If Common Lisp describes a certain return value for 'push', > people will tend to use it that way, Yes, though as I said, it is very rarely used, at least on our sources. 34 uses out of ~4,100. There are also a lot like (and test-1 test-2 ... (push item place)) but don't really depend on the return value of `push', they're just using `and' as a conditional. > and I think it would be > a waste of time changing all code that ever depends on that return value. At least for our sources, that time's already been wasted, whether we apply my patch or not. > It would be easier to document that return value. I tend to agree, because I don't like gratuitously discarding CL compatibility.