Subject: Re: Macro question (bizarre) From: Erik Naggum <erik@naggum.no> Date: 2000/03/18 Newsgroups: comp.lang.lisp Message-ID: <3162359744057189@naggum.no> * Tom Breton <tob@world.std.com> | Pardon my opinion, but multiple values are basically for when you have | code set in stone... noted as opinion. | IOW, values is basically a backwards-compatibility thing. it can definitely be used for this purpose, and may even have great value used this way, but I must admit that I never thought of values like that. values to me is a mechanism that removes the burden of agreeing on the aggregate form of the returned values. I guess this has to be explained in terms of how other languages deal with the same issue: multiple values are often expressed in C by passing a pointer to a structure in the caller's memory to be filled in by the callee. returning a structure is _still_ not kosher in the C world, and incompatibilities exist in how it is done. this affects how people return more than one value from their functions. in some cases, the caller needs to pass multiple pointers as arguments to be written to. Ada has a clean way to do this: with in and out arguments, the latter of which act just like multiple-value-setq. | When that's *not* the case, simply returning a list is better in every | way that springs to mind, IMO. since consing and destructuring both have very significant costs, I'd rate this is an insufficiency of things that spring to mind. #:Erik