2016-09-21 26 views
4

我想知道如何解決一個未知的基本線性方程。使用Prolog的一個未知的線性方程

我試圖通過字符串分割來獲得我需要的一切來解決方程,但我相信有更好的方法。

solve(5 + X = 10). 
X = 5. 
solve(5+8 = Ans). 
Ans = 13. 

這是我試圖解決的事情。我想用解決方案/ 1。

預先感謝您。

回答

7

你可以寫:

:- use_module(library(clpfd)). 

solve(X+Y=Z):-X+Y#=Z. 

一些例子:

?- solve(5+X=10). 
X = 5. 

?- solve(5+8=ANS). 
ANS = 13. 

爲了解決這個問題,而不庫,你可以寫:

solve(S):-var(S),throw("instatiation error"). 
solve(X+Y=Z):-(var(X),var(Y);var(X),var(Z); 
       var(Y),var(Z)),throw("instatiation error"). 
solve(X+Y=Z):-nonvar(Z),nonvar(Y),L is Z-Y,X=L. 
solve(X+Y=Z):-nonvar(Z),nonvar(X),L is Z-X,Y=L. 
solve(X+Y=Z):-nonvar(X),nonvar(Y),L is X+Y,Z=L. 

又一次的例子:

?- solve(5+X=10). 
X = 5 ; 
false. 

?- solve(5+8=Ans). 
Ans = 13. 
+0

有沒有辦法通過不使用libaries來解決這個問題? –

+0

我的意思是它可以像這樣工作:解決(X + Y = Z): - X是Z-Y; Y是Z-X; Z是X + Y.' 但我不知道如何讓它根據已經給出的選擇做選擇。 @coder –

+1

更新了答案,希望它有幫助! – coder