Выполнение кода, хранящегося в виде списка
-
05-07-2019 - |
Вопрос
После понимания (цитата) мне интересно, как можно заставить оператор выполняться. Моя первая мысль была
(defvar x '(+ 2 21))
`(,@x)
, но это просто равно (+ 2 21)
или содержимому x
. Как выполнить код, который был помещен в список?
Решение
(eval '(+ 2 21))
Другие советы
@ Christi & # 225; n Romo:
Пример Backtick: вы можете реализовать приложение, используя eval и backtick, потому что вы можете объединить аргументы в форму. Не будет самой эффективной вещью в мире, но:
(eval `(and ,@(loop for x from 1 upto 4 collect `(evenp ,x))))
эквивалентно
(eval '(and (evenp 1) (evenp 2) (evenp 3) (evenp 4)))
Кстати, это имеет тот же результат, что и (гораздо более эффективный)
(every 'evenp '(1 2 3 4))
Надеюсь, что удовлетворит ваше любопытство!
Ознакомьтесь с забавным учебным пособием по Лиспу на http://lisperati.com/ . Существуют версии для Common Lisp и Emacs Lisp, которые демонстрируют использование квазицит и макросов.