1

谁能帮我在PROLOG中使用堆栈概念编写一个程序,将算术表达式从后缀(反向波兰表示法)转换为前缀形式。算术表达式可能包含 4 个算术运算符+ 、 - 、 / 、 *和一元函数:sin, cos, tan, exp, log and sqrt.

4

1 回答 1

1

append /2 它是一个有用的列表组合器。它以相当一般的方式允许任意数量的列表之间的连接关系。我在这里只展示基本的,你需要完成你的任务,添加一些细节作为一元函数,定义 isop/1

pos2pre(Pos, Pre) :-
    append([A, B, [O]], Pos), isop(O), A \= [], B \= [],
    pos2pre(A, APre),
    pos2pre(B, BPre),
    !, append([[O], APre, BPre], Pre).
pos2pre([P], [P]).

一个小测试:

?- pos2pre([1,5,*,2,+],X).
X = [+, *, 1, 5, 2].

我认为您应该尝试编写相同的逻辑,但使用append /3,这将帮助您了解该过程的工作原理。

于 2013-02-22T14:03:12.103 回答