使用Prolog进行前缀转换后缀

时间:2013-02-22 10:36:14

标签: prolog

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

1 个答案:

答案 0 :(得分: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编写相同的逻辑,这将有助于您了解该过程的工作原理。