На этом шаге мы приведем функцию, осуществляющую перевод инфиксного выражения в префиксное.
Запрограммируем интерпретатор INFIX-PREFIX который преобразует инфиксную запись операций (например, +, - , * и /) выражения в префиксную и возвращает значение выражения.
(DEFUN INFIX-PREFIX (LAMBDA (L) ; Переопределение символов арифметических операций ; (PRIN1 "Префиксное представление: ") (PRINT (PREFIKSNAYA L)) (PRIN1 "Результат вычислений: ") (EVAL (PREFIKSNAYA L)) )) ; -------------------------- ; (DEFUN PREFIKSNAYA (LAMBDA (L) ( (ATOM L) L ) ( (EQ (LENGTH L) 2) ; Унарная операция ; (CONS (CAR L) (PREFIKSNAYA (CADR L))) ) ( (EQ (LENGTH L) 3) ; Бинарная операция ; (LIST (CADR L) (PREFIKSNAYA (CAR L)) (PREFIKSNAYA (CADDR L))) ) ( PRINT "Ошибка в записи формулы !") ))
Тестовый пример:
$ (INFIX-PREFIX '((-2 + 4) * 3)) Префиксное представление: (* (+ -2 4) 3) Результат вычислений: 6
Со следующего шага мы начнем рассматривать этапы проектирования интерпретатора.