Postfix的转换使用Prolog的前缀(Postfix to Prefix Conversion

2019-08-17 03:15发布

谁能帮我写使用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
标签: prolog