代码之家  ›  专栏  ›  技术社区  ›  James McMahon

调车场算法的反演是什么?

  •  12
  • James McMahon  · 技术社区  · 16 年前

    Dijkstra Shunting Yard algorithm 用于分析中缀符号并生成 RPN 输出。

    我正在寻找相反的方法,一种将RPN转换为高中数学课堂风格的中缀表示法的方法,以便从数据库中表示RPN表达式,以一种可理解的方式让用户了解。

    请节省时间,不要自己编算法,只要给我指出课本上我找不到的例子。从调车场算法向后工作,利用我对符号的了解,我可能会想出一个解决方案。我只是在寻找一条捷径,所以我不需要重新发明方向盘。

    哦,请不要把这个贴上“家庭作业”的标签,我 发誓 我已经放学了!;-)

    2 回复  |  直到 16 年前
        1
  •  7
  •   Bill the Lizard    16 年前

    由于RPN也被称为后缀符号,我尝试了谷歌搜索。 convert "postfix to infix" 得到了不少结果。前几个有代码示例,但我发现 RubyQuiz entry 特别有启发性。

        2
  •  6
  •   Paul Reiners    16 年前

    如果您不担心删除多余的括号,那么下面的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)))))))