SWI Prolog-简化表达式

SWI Prolog-简化表达式,prolog,Prolog,我想写一个程序simplify(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 我们将所有角色移到开头。然后计算数值操作数之和,并将其附加到表达式的末尾 如何编写程序?这显然是一个家庭作业问题,但这里有一个SWI P

我想写一个程序simplify(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
我们将所有角色移到开头。然后计算数值操作数之和,并将其附加到表达式的末尾


如何编写程序?

这显然是一个家庭作业问题,但这里有一个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).

这显然是一个家庭作业问题,但这里有一个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).

你使用什么样的prolog实现?你使用什么样的prolog实现?