Выполнение кода, хранящегося в виде списка

StackOverflow https://stackoverflow.com/questions/172935

  •  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, которые демонстрируют использование квазицит и макросов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top