2010-08-17 45 views
1

我想編寫一個簡化表達式的程序(E,E1)。 我只有一個操作+,符號和數字操作數。此程序的示例:SWI Prolog - 簡化表達式

simplify(a + 1 + b + 5, E) ------> E = a + b + 6 

simplify(1 + b + 9 + a + 5 + c, E) ------> E = b + a + c + 15 

我們轉移到開頭的所有字符。然後我們計算數字操作數的總和並將其附加到表達式的末尾。

如何編寫程序?

回答

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). 
+2

非常感謝!這不是我的家庭作業,這是我的愛好))) – George 2010-08-19 08:45:01

+0

你使用什麼prolog的實現? – Sergey 2011-06-17 12:08:19