我想编写一个简化表达式(E,E1)的程序。 我只有一个操作+,以及符号和数字操作数。此过程的示例:
simplify(a + 1 + b + 5, E) ------> E = a + b + 6
simplify(1 + b + 9 + a + 5 + c, E) ------> E = b + a + c + 15
我们转移到开头的所有角色。然后我们计算数值操作数的总和,并将其附加到表达式的末尾。
如何编写程序?
答案 0 :(得分:4)
嗯,这显然是一个家庭作业问题,但无论如何这里是一个SWI Prolog项目:
:- op(500, xfy, user:(+)).
simplify(Expr, Simplified) :-
split(Expr, Syms0, Nums0),
sumlist(Nums0, Nums),
append(Syms0, [Nums], Syms),
unparse(Syms, Simplified).
split(X+Y, [X|Syms], Nums) :- atom(X), split(Y, Syms, Nums).
split(X+Y, Syms, [X|Nums]) :- integer(X), split(Y, Syms, Nums).
split(X, [X], []) :- atom(X).
split(X, [], [X]) :- integer(X).
unparse([X], X).
unparse([X|Xs], X+Y) :- unparse(Xs, Y).
:- simplify(a+1+b+5, a+b+6).
:- simplify(1+b+9+a+5+c, b+a+c+15).