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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top