Работа с созданными (не на верхнем уровне) функциями в Common Lisp - PullRequest
0 голосов
/ 12 февраля 2019

Я не уверен, что лучше всего работать с функциями, которые не определены на верхнем уровне.

Я создал список лямбда-выражений рабочей лошадки, назовите его *lambdas*, которые являются производнымииз пользовательских данных ввода.Существует также список *args*, который предоставляет соответствующие аргументы для каждой лямбды.Я хотел бы превратить каждую лямбду в функцию, скомпилировать ее, применить к соответствующим аргументам и собрать результаты.

В настоящее время я делаю (setf (symbol-value *dummy-fn-name*) (compile nil lambda)) как временное место для хранения каждой функции, затемна (apply (symbol-value *dummy-fn-name*) args), чтобы получить каждый результат, но это, вероятно, квалифицируется как хак.Есть ли более прямой способ работы с лямбдами?Функции не должны зависать после того, как они apply -ед.

1 Ответ

0 голосов
/ 12 февраля 2019

Вам не нужно помещать ее в глобальную переменную, если она просто временная:

(let ((func (compile nil lambda)))
  (apply func args))

или просто

(apply (compile nil lambda) args)
...