quote - What's the difference between ' and #' in Lisp? -
it seems both
(mapcar 'car '((foo bar) (foo1 bar1))) and
(mapcar #'car '((foo bar) (foo1 bar1))) work same.
and know ' means (quote symbol) , #' means (function function-name).
but what's underlying difference? why these 2 both work in previous mapcar?
'foo evaluates symbol foo.
#'foo evaluates function bound name foo.
in lisp symbol can called function when symbol foo has function binding. here car symbol has function binding.
but not work:
(flet ((foo (a) (+ 42))) (mapcar 'foo '(1 2 3 4 5))) that's because foo symbol not access local lexical function , lisp system complain when foo not function defined elsewhere.
we need write:
(flet ((foo (a) (+ 42))) (mapcar #'foo '(1 2 3 4 5))) here (function foo) or shorthand notation #'foo refers lexical local function foo.
note in
(funcall #'foo ...) vs.
(funcall 'foo ...) the later might 1 more indirection, since needs lookup function symbol, while #'foo denotes function directly.
summary:
if symbol has function binding, calling function through symbol works.
Comments
Post a Comment