Существует инфиксный пакет для общего lisp (см. http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/syntax/infix/infix.cl),, который преобразует инфиксную форму в префикс.
Например:
(string->prefix "1+2") ;; => (+ 1 2)
Он также предоставляет макрос для чтения #I, который может оценивать инфиксную форму, например,
#I(1+2) ;; => 3
Но я не хочу использовать этот макрос для чтения.
Я написал простую функцию, которая использует cl-ppcre, чтобы заменить строку числом, т. Е.
(prepare-form "1+x*x" "x" 3) ;; => "1+3*3"
Наконец, у меня есть функция, которая оценивает инфиксную форму
(defun eval-infix (form &rest args)
(eval (string->prefix (apply #'prepare-form form args))))
Может ли функция eval-infix быть реализована без использования функции eval?
Моя конечная цель - вызвать eval-infix так:
(eval-infix "1+x*x" "x" (+ 1 2))