2015-09-23 27 views
3

我是Prolog.Now我是一個新手,現在我想用Prolog解決算術表達式的問題。假設我們有這樣一個謂詞:expr(E,Val,Var,Sol) 第一個是表達式,第二個是值,第三個是變量,第四個是結果。 例如,如果我們問:expr(3+x,2,x,S)答案將是S=5 ,如果我們要求expr(5*6,3,x,S)答案將是S=30在這種情況下,x不會出現在表達式中,所以我們只是忽略該變量及其值。 我想知道我怎麼能實現它,你們可以給我一些提示使用序言來解決算術表達式

+0

我不太明白你真正想做什麼......求解方程?或評估算術表達式(有一些額外的替代)? – repeat

回答

1
number_itype(N) :- 
    functor(N,_,_), 
    number(N). 

expr(V,Val,V,Val). 
expr(N, _Val, _Var, N) :- 
    number_itype(N). 
expr(A+B, Val,Var, R) :- 
    expr(A, Val, Var, RA), 
    expr(B, Val, Var, RB), 
    R is RA+RB. 

有更清潔的方式來表達這一點。也許有人想貢獻。

+0

OPs查詢失敗'expr(5 * 6,3,x,S)' – gusbro

+0

@gusbro:你能幫我解決嗎? – false