Frage

Dijkstra Rangierbahnhof Algorithmus verwendet wird, ein analysieren Infixschreibweise und erzeugen RPN Ausgang umkehren.

Ich bin für das Gegenteil, eine Art und Weise RPN in der Highschool-Mathe-Klasse Stil Infixschreibweise zu drehen, um aus einer Datenbank RPN Ausdrücke darstellen Anwender in verständlicher Weise zu legen.

Bitte speichern Sie Ihre Zeit und kochen nicht den Algorithmus selbst, zeigen Sie mir nur einige Beispiele zu Lehrbuch, das ich nicht zu finden scheinen. Arbeiten nach hinten aus dem Rangierbahnhof Algorithmus und mit meinem Wissen über die Notationen ich wahrscheinlich eine Lösung aufzuarbeiten werden kann. Ich bin nur für eine schnelle Abkürzung suchen, so habe ich nicht das Rad neu zu erfinden.

Oh, und bitte markieren, das nicht als "Hausaufgaben", I schwöre Ich bin schon aus der Schule! ; -)

War es hilfreich?

Lösung

Da RPN auch als Postfixnotation bekannt ist, habe ich versucht googeln konvertieren „postfix infix“ und bekam ziemlich viele Ergebnisse. Die erste haben mehrere Code-Beispiele, aber ich fand die RubyQuiz Eintrag besonders aufschlussreich.

Andere Tipps

Wenn Sie nicht besorgt sind über redundante Klammern zu entfernen, dann wird der folgende Lisp-Code funktioniert:

(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)))))))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top