Hello,
the most powerful thing in elisp is program as data but what does it mean how can I run data as a program. I was confused too but here is what I found.
First I tried this:
(setq x '(+ 1 3))
(x)
basically setting the value of x as a list. now x is set to some code but when I try to run x as function using (x) syntax we get this error *** Eval error *** Symbol’s function definition is void: x
. It tried to look for function in x but couldn't find it. then how can I run the code that I stored in a variable? how to evaluate it? we need a built-in function eval.
If we run this code it works and outputs 4:
(setq x '(+ 1 3))
(eval x)
so yeah, it is how you can evaluate a code stored in a variable. feel free to correct me if there is another way to achieve it :)
I consider code and data to be mangled within the context of a macro.
In the macro definition we receive the code as data even though it looks like code when using the macro. Being able to use any lisp code inside of the macro definition, including other macros, makes for a mentally cohesive programming environment.
Not sure I ever used eval aside from some genetic programming experiments.