It is a technique used frequently in On Lisp, which is on Common Lisp:
> (mapcar #\'(lambda (x) (+ x 10))
\'(1 2 3))
(11 12 13)
In short, you don't have to sharp-quote lambda
because it is a macro that expands to (function (lambda ...))
, and it is function
that does all the magic.
The only sense in which function
is not necessary is that you don't have to type it yourself. It is function
, not lambda
, that is the fundamental operator. Lambda expressions themselves are just ordinary lists (which function
knows how to turn into function objects), and lambda
is just an ordinary macro. So you've got things rather backwards: that lambda expressions return function objects does not obviate function
because lambda
is explained in terms of function
.
An additional wrinkle is that in Emacs Lisp, lists that start with lambda
can be treated as functions directly, without going through function
. This is not the case in CL (although an explicit conversion is available in the form of (coerce some-list 'function)
).