Subject: Re: Basics of #'(lambda ...
From: Erik Naggum <>
Date: 19 Aug 2002 16:54:32 +0000
Newsgroups: comp.lang.lisp
Message-ID: <>

* Eli Bendersky
| However, if I try to omit the #' (which seems logical to me as mapcar really
| accepts a function, so to complicate it by dereferencing a symbol doesn't
| make much sense)

  #' is a reader macro just like '.  #'x means (function x) just as 'x means
  (quote x).  It is not as optional as you might think.  If you come from a
  Scheme background (which I believe you might do because you think that
  "logical" /alone/ is useful and has anything to do with language design,
  i.e., "alone" as apart from the /premises/ of the logic employed), you
  should realize that Common Lisp is not a dialect of Scheme and that you
  should endeavor to understand it in its own right.

  `lambda´ is a macro that returns the whole form wrapped in a `function´, so
  if you observe that it "works", the important thing is to understand /why/.

  So when you evaluate (lambda (x) (+ x 10)), the macro is first expanded so
  you get (function (lambda (x) (+ x 10))) which can then be evaluated to a
  function object and returned.

| Could you Lisp gurus please elaborate?  What is the right way to do it?

  The right way is to understand what the `function´ special operator does and
  then to use it consistently.  If you feel uncomfortable with the heavy use
  of punctuation marks in the #' reader macro, the easiest solution is to
  write "function" out in full.

  As you get more experienced with Common Lisp, you will see that `function´
  is also used to name functions that consist of more than a symbol name, so
  your initial assumption that it is the same as `symbol-function´ should be
  discarded as soon as possible.

Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.