Execução de código armazenado como uma lista
-
05-07-2019 - |
Pergunta
Depois de entender (citação), estou curioso para saber como se poderia fazer com que a instrução seja executada. Meu primeiro pensamento foi
(defvar x '(+ 2 21))
`(,@x)
Mas isso só é avaliada como (+ 2 21)
, ou o conteúdo de x
. Como seria um código de execução que foi colocado em uma lista?
Solução
(eval '(+ 2 21))
Outras dicas
@ Christián Romo:
crase exemplo: você pode implementar um bocado aplicar usando eval e crase, porque você pode emendar argumentos em um formulário. Não vai ser a coisa mais eficiente do mundo, mas:
(eval `(and ,@(loop for x from 1 upto 4 collect `(evenp ,x))))
é equivalente a
(eval '(and (evenp 1) (evenp 2) (evenp 3) (evenp 4)))
Aliás, este tem o mesmo resultado que o (muito mais eficiente)
(every 'evenp '(1 2 3 4))
Hope que satisfaz a sua curiosidade!
Dê uma olhada engraçado Lisp tutorial em http://lisperati.com/ . Existem versões para Lisp Comum e Emacs Lisp, e demonstra o uso de quasiquote e macros.