Шаг 97.
Простейшие интерпретаторы. Перевод инфиксного выражения в префиксное

    На этом шаге мы приведем функцию, осуществляющую перевод инфиксного выражения в префиксное.

    Запрограммируем интерпретатор 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

    Со следующего шага мы начнем рассматривать этапы проектирования интерпретатора.




Предыдущий шаг Содержание Следующий шаг