Andreas Fuchs <asf@void.at> wrote:
+---------------
| Today, Rob Warnock <rpw3@rpw3.org> wrote:
| > Well, let me qualify that: If you do try to implement APPLY in terms
| > of FUNCALL, you end up with the same kind of godawful mess you get
| > when trying to emulate APPLY in C ...
...
| Try this instead:
|
| (defun apply-definer (max-args)
| `(defun my-apply (f &rest args)
| (case (length args)
| ,@(loop for arg-count from 0 to max-args
| collect `((,arg-count)
| (funcall
| f
| ,@(loop for arg-idx from 0 to (1- arg-count)
| collect `(nth ,arg-idx args)))))
| (otherwise
| (error ,(format nil "Can't apply to more than ~A args" max-args))))))
+---------------
D'oh!! Just when I begin to think I'm finally starting to think in CL,
somebody like you comes along and points out that I really haven't yet
fully internalized "the Lisp way"[1].
Thanks. (No, really!!)
-Rob
[1] Not to be confused with The Lambda Nature, which even Schemers have
to some extent.
-----
Rob Warnock, PP-ASEL-IA <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607