Your experiments bump into the difference between so called Lisp 1 and Lisp 2 systems. In Lisp 2 systems like elisp, variables and functions have separate namespaces. The same name can be bound to both a function and a variable, or to just one, or to neither. In your first example, you assign a value to the variable slot of x
, but the function slot is still unspecified. So when you try to call it as a function, you are told that its "function definition is void" -- it doesn't have a function associated with it. In another lisp, that might have worked.
Emacs
Our infinitely powerful editor.
That isn't really what is meant by "code as data". When your source code is read by lisp, before it executes it, it transforms it into data that can be examined or modified from other lisp code. One of the ways that we interact with this code-as-data is when we use metaprogramming techniques like macros. Another way that you are commonly exposed to is the (interactive)
marker that begins certain functions. While it looks like a function call, IIRC the function call has no value or side effects, it does nothing at all. But it is visible in the code-as-data of the function, and emacs looks to see if a function starts with a call to interactive
to determine whether or not a function is meant to be called interactively from M-x
.
oh I didn't know it, thank you so much for correcting me! =)
Thank you so much for providing these links, I will read it all.