Что представляет собой инверсия алгоритма маневровой станции?
Вопрос
Дийкстра Алгоритм маневровой площадки используется для анализа инфиксной нотации и генерации RPN результат.
Я ищу противоположное, способ превратить RPN в инфиксную нотацию в стиле математического класса средней школы, чтобы представлять выражения RPN из базы данных простым пользователям понятным способом.
Пожалуйста, сэкономьте свое время и не придумывайте алгоритм сами, просто укажите мне на примеры из учебника, которые я, похоже, не могу найти.Работая в обратном направлении от алгоритма маневровой станции и используя свои знания о нотациях, я, вероятно, смогу выработать решение.Я просто ищу короткий путь, чтобы мне не пришлось изобретать велосипед.
О, и, пожалуйста, не помечайте это как "домашнее задание", я клянись Я уже закончила школу!;-)
Решение
Поскольку RPN также известен как постфиксная нотация, я попробовал погуглить преобразовать "постфикс в инфикс" и получил довольно много результатов.В первых нескольких есть примеры кода, но я нашел Запись в RubyQuiz особенно поучительно.
Другие советы
Если вы не беспокоитесь об удалении избыточных круглых скобок, то следующий Lisp-код будет работать:
(defun rpn-to-inf (pre)
(if (atom pre)
pre
(cond ((eq (car (last pre)) 'setf)
(list (rpn-to-inf (first pre)) '= (rpn-to-inf (second pre))))
((eq (car (last pre)) 'expt)
(list (rpn-to-inf (first pre)) '^ (rpn-to-inf (second pre))))
(t (list (rpn-to-inf (first pre))
(car (last pre))
(rpn-to-inf (second pre)))))))