3 ms·
In Common Lisp in your first example it's not (funcall #'f (first list) ...) but (funcall f (first list)) ... f is already a function object. We coul
by lispm 10y ago
In Common Lisp in your first example it's not
(funcall #'f (first list) ...)
but
(funcall f (first list)) ...
f is already a function object.
We could write a macro for that or a new version of defun. Here just a macro lisp1fy:
(defmacro lisp2fy ((&rest calls) &body body)
`(flet (,@(loop for (f . args) in calls
collect `(,f ,args (funcall ,f ,@args))))
(declare (inline ,@(loop for (f . nil) in calls collect f)))
,@body))
(defun bad-map (f list)
"Maps function `f' over `list', inefficiently."
(lisp2fy ((f a))
(when list
(cons (f (first list))
(bad-map f (rest list))))))
- patrec 10y agoYeah, braino -- thanks. A custom binding form would be another way to do it, but I'd prefer the pseudo-destructuring -- cleaner and more concise. I'd hope a new lisp-2 dialect would come with better destructuring support for defun and binding forms anyway (destructuring-bind, multiple-value-bind and flet could all be subsumed by let if (values ...) (function ...) where valid left hand patterns).