谁能帮我写使用PROLOG堆概念转换从后缀算术表达式(逆波兰式)前缀形式的节目。 算术表达式可以包含4和算术运算符+, - ,/,*和一元函数: sin, cos, tan, exp, log and sqrt.
Answer 1:
追加 / 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].
我想你应该尝试写同样的逻辑,但使用追加 / 3,这将有助于您了解程序是如何工作的。
文章来源: Postfix to Prefix Conversion using Prolog