I am also relatively new to Lisp, but I think you are thinking of eval . eval is a way to change data back into code.
Namely, consider a simple function.
(defun foo (abc) (list abc))
Then, if you do something like this, you will get a list of characters:
CL-USER> (foo 'a 'b 'c) (ABC)
If you add a quote at the beginning, the function call itself is considered as part of the data (list):
CL-USER> '(foo 'a 'b 'c) (FOO 'A 'B 'C)
Adding another quote has the expected effect:
CL-USER> ''(foo 'a 'b 'c) '(FOO 'A 'B 'C)
Let's expand it with eval , which essentially can be seen as the inverse of quote . This is the opposite. The x axis is a data form. The Y axis is a code form. I hope this (somewhat stretched) analogy makes sense.
CL-USER> (eval ''(foo 'a 'b 'c)) (FOO 'A 'B 'C)
Can you guess what happens if I kiss two lines of eval in a row? Here he is:
CL-USER> (eval (eval ''(foo 'a 'b 'c))) (ABC)
Madphysicist
source share