On 11 Jun 2011, at 10:42, Nick Levine wrote:

> Actually, looking through my code base, I find I've used &aux half a
> dozen times in the last ten years. Always in a BOA constructor.

I have a tendency to use &aux more and more often, even outside of BOA 
constructors. There are two main reasons:

- It saves horizontal space in the source code. Compare the following two 
pieces of code:

(defun foo1 (a b c &aux d e f)
  ...)

(defun foo2 (a b c)
  (let (d e f)
    ...))

The use of &aux saves one level of indentation here, which can sometimes make a 
piece of code look more beautiful.


- The more important reason is that I sometimes want to derive some value from 
an argument that is "very close" to the value of the original argument. Here is 
an example:

(defun required-args (args)
  (loop for arg in args until (member arg lambda-list-keywords) collect arg))

(defun process-method-arguments (args &aux (required-args (required-args args)))
  ...)

This is, of course, only a subjective quality, but in cases like this, the 
function actually only wants to do something with the required arguments for a 
method definition, but it also wants the client code not to worry too much 
about what it passes to the function. To me, &aux perfectly expresses that idea.


Best,
Pascal

--
Pascal Costanza
The views expressed in this email are my own, and not those of my employer.




_______________________________________________
pro mailing list
pro@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/pro

Reply via email to