2016-09-21 4 views
4

私は未知の1つの基本線形方程式を解く方法が不思議です。プロローグを使用して1つの未知の線形方程式

私は方程式を解決するために必要なすべてを得るために文字列分割でそれをやってみましたが、もっと良い方法があると確信しています。

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

これは私が解決しようとしていることです。私はsolve/1を使いたい。

ありがとうございます。

答えて

7

あなたは書くことができます:

:- use_module(library(clpfd)). 

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

いくつかの例:

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. 

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

はあなたが書くことができるライブラリせずに、それを解決するために3210

+0

ライブラリを使用しないでこれを解決する方法はありますか? –

+0

私はそれのように動作することができることを意味する '解決(X + Y = Z): - XはZ - Yです; YはZ-Xであり; ZはX + Yです。 しかし、私はそれが与えられたことに基づいて選択をする方法を手掛かりがありません。 @coder –

+1

答えが更新されました。 – coder

関連する問題