In chapter 3 of Practical Common Lisp book there’s an example of a SQL-like select and where functions. Here’s a simplified version of it:
(defun where (x)
#'(lambda (item)
(> item x)))
and it is used like this:
(remove-if-not (where 2) (list 1 2 3 4))
Earlier in the book it is explained that the #' sequence is used to state that it is followed by a function name, rather than a variable that requires evaluation. I don’t understand why it’s needed here. I tried implementing the where function without it and it worked as well:
(defun where (x)
(lambda (item)
(> item x)))
I tried googling for it, and, as you can imagine, with such a sequence of characters it wasn’t a very fruitful search. And I don’t know the name of this thing.
Is there any particular reason why it’s needed in the above code?
This is the precise page in Hyperspec which deals with the standard macro character “sharp” followed by “single quote”.
To make it simple, this reader macro expands to enclose the following form into
(function <form>)s-expression. This effectively tells the parser that the form is callable.lambdais a macro, which generates the code, which already contains the(function <form>), but historically and for consistency, the alternative form, which is obtained from the reader macro with sharp + quote, is often used too.Here’s Writing lambda expressions in common lisp (another StackOverflow question) which covers in-depth the particular case of
(lambda <form>)