this post was submitted on 12 Feb 2025
4 points (100.0% liked)

Emacs

431 readers
1 users here now

founded 2 years ago
MODERATORS
 

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 :)

top 1 comments
sorted by: hot top controversial new old
[–] madnificent@lemmy.world 2 points 1 week ago

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.