Я изучаю Racket (подобный схеме Lisp), и я попытался сделать что-то вроде (apply + '(1 2))
, но без использования apply
, и я потерпел неудачу. Я был почти уверен, что apply
может быть каким-то образом смоделирован с использованием eval
, но теперь у меня есть сомнения.Возможно ли реализовать `apply` в Lisp с использованием` eval`?
Итак, мой вопрос: может ли apply
быть реализован в Racket (или другом Lisp), используя только eval
и другие основные операции? То есть, как это сделать:
{ define [my-apply f arg]
;; what does go here?
}
(my-apply + (list 1 2)) ; => 3
Несомненно. Подсказка: трюк состоит в том, чтобы передать список функторов и обратиться к 'eval', не оценивая список самостоятельно, поэтому вам нужно использовать' (list ...) 'и' (quote ...) '. –
Есть ли решение, которое работает, если 'arg' ссылается на переменную с лексической областью? – finnw
Что-то, что вы должны учитывать, это призывы к eval. Итак, если вы определяете my-apply, вызывая eval, который в свою очередь вызывает запросы, действительно ли вы определили my-apply без использования приложения? – WuHoUnited