cross-posted from: https://lemmy.ca/post/38996724

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

  • Jerkface (any/all)@lemmy.ca
    link
    fedilink
    English
    arrow-up
    4
    ·
    30 days ago

    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.