Преобразование польской записи - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите в решении задачи. Разработать функцию, преобразующую польскую обратную запись, заданную в форме списка, в арифметическое выражение. Например: Вход: (- * 3 2 5) Выход: (3 * 2 - 5)

Решение задачи: «Преобразование польской записи»

textual
Листинг программы
(defun prefix-infix (w &optional ac &aux (a (car w)) (d (cdr w)))
  (if d
      (if (numberp a)
          (cons a (cons (car ac) (prefix-infix d (cdr ac))))
          (prefix-infix d (cons a ac)))
      w))
 
> (prefix-infix '(- * 3 2 5))
(3 * 2 - 5)

Объяснение кода листинга программы

В коде представлена функция с именем prefix-infix, которая преобразует польскую запись в обратную польскую запись (по сути, это обратный процесс выражения математических операций). Список элементов кода с номерами до 20:

  1. (defun prefix-infix (w &optional ac &aux (a (car w)) (d (cdr w)))
  2. (if d
  3. (if (numberp a)
  4. (cons a (cons (car ac) (prefix-infix d (cdr ac))))
  5. (prefix-infix d (cons a ac))
  6. )
  7. )
  8. )
  9. )
  10. (prefix-infix '(- * 3 2 5))
  11. (3 * 2 - 5) Вот что происходит в коде:
  12. Функция prefix-infix определена с помощью defun.
  13. Код начинается с проверки d. Если d не nil, то выполняется блок кода внутри if.
  14. Внутри блока кода проверяется, является ли a числом. Если да, то выполняется следующий блок кода.
  15. В этом блоке кода создается новая функция cons, которая добавляет a в начало списка, за которым следует car ac. Затем вызывается prefix-infix с аргументами d и cdr ac.
  16. Если a не является числом, то вызывается prefix-infix с аргументами d и cons a ac.
  17. Код завершается.
  18. Вызывается функция prefix-infix с аргументом '(- * 3 2 5).
  19. Результатом является (3 * 2 - 5). Обратите внимание, что код преобразует польскую запись в обратную польскую запись, но не выполняет фактические вычисления. Для выполнения вычислений необходимо добавить дополнительный код.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы