Вычисление значения выражения, заданного в виде дерева - Lisp

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

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

Арифметическое выражение представлено в виде дерева (листья обозначают целые числа, прочие узлы операции). Написать программу вычисления такого выражения.

Решение задачи: «Вычисление значения выражения, заданного в виде дерева»

textual
Листинг программы
  1. ;; racket-lang.org
  2. (define (foo op)
  3.   (match op
  4.     ('+ +)
  5.     ('- -)
  6.     ('* *)
  7.     ('/ /)))
  8.  
  9. (define (eval tree)
  10.   (if (list? tree)
  11.       (apply (foo (car tree)) (map eval (cdr tree)))
  12.       tree))
  13.  
  14. (eval '(+ (/ 4 2) (- (* 3 4) 7)))
  15. ;7

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

В данном коде на языке Lisp реализована функция eval, которая вычисляет значение выражения, заданного в виде дерева. Алгоритм работы функции eval следующий:

  1. Если переданное значение tree является списком, то функция eval вызывает саму себя, применяя функцию foo к первому элементу списка и передавая ей в качестве аргумента результат вызова eval для остальных элементов списка.
  2. Если переданное значение tree не является списком, то функция eval возвращает его без изменений. В данном коде определена также вспомогательная функция foo, которая принимает в качестве аргумента оператор и возвращает результат вычисления соответствующей операции: сложения, вычитания, умножения или деления. В основной функции eval происходит вызов функции foo с оператором /, так как в переданном выражении присутствует деление. Результатом вычисления будет число 7.

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


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

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

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут