Subject: Re: argument passing: defaults
From: Erik Naggum <>
Date: 1997/09/24
Newsgroups: comp.lang.lisp
Message-ID: <>

| (defun zz (&key (ar1 ..) (ar2 ..) (ar3 ..)) ...)
| (defun xx (&key (ar1 nil ar1p) (ar2 nil ar1p) (ar3 nil ar3p))
|   (apply #'zz (nconc (if ar1p (list :ar1 ar1)) (if ar2p (list :ar2 ar2))
| 		     (if ar3p (list :ar3 ar3)))))
| Of course, this is suitable only is xx is not called too often - because
| of the extra consing. Or maybe not? You have to cons up the list of args
| for zz anyway, right?

this looks like a case for 

    (defun xx (&rest args &key ...)
      (apply #'zz args))

if you don't need access to the actual arguments, you don't even need to
specify keyword arguments in xx.  keywords arguments aren't processed at
all if there is no &key in the lambda list.

if you think this year is "97", _you_ are not "year 2000 compliant".

see for Emacs-20-related material.