Subject: lambda list in MULTIPLE-VALUE-BIND?
From: Erik Naggum <clerik@naggum.no>
Date: 1998/03/07
Newsgroups: comp.lang.lisp
Message-ID: <3098288658259597@naggum.no>


  lately, I have been annoyed by a what I think is a limitation in the
  usability of multiple values.  in particular, I need to know whether I
  got a NIL back as a value or didn't get anything.  MULTIPLE-VALUE-BIND is
  insufficient in keeping track of the number of values involed.  in my
  view, it is as much an error for a function to return too few or too many
  values as it was to pass it the wrong number of arguments -- when those
  values are actually needed.

  now I wonder -- why was MULTIPLE-VALUE-BIND defined so simplistically?
  with just a list of symbols to be bound, it sort of defeats the purpose
  of a variable number of returned values, doesn't it?

  I can obtain the desired behavior with either of these macros (except
  that MULTIPLE-VALUE-DESTRUCTURING-BIND is a bad name):

(defmacro multiple-value-destructuring-bind (lambda-list value-form &body body)
  `(destructuring-bind ,lambda-list (multiple-value-list ,value-form)
     ,@body))

(defmacro multiple-value-destructuring-bind (lambda-list value-form &body body)
  `(multiple-value-call (lambda ,lambda-list ,@body) ,value-form))

  these are fairly expensive when the function receiving multiple values
  from some other function _already_ knows how many values it receives and
  could signal an error when the number doesn't match expectations.

  is there a better way to check the number of returned values than with
  MULTIPLE-VALUE-CALL, or is that the only special operator of consequence?

#:Erik
-- 
  God grant me serenity to accept the code I cannot change,
  courage to change the code I can, and wisdom to know the difference.