使用Prolog的一个未知的线性方程

Ege*_*Aia 4 prolog constraint-programming clpfd

我想知道如何解决一个未知的基本线性方程.

我尝试通过字符串拆分来实现它以获得解决方程所需的一切,但我确信有更好的方法.

solve(5 + X = 10).
X = 5.
solve(5+8 = Ans).
Ans = 13.
Run Code Online (Sandbox Code Playgroud)

这是我想要解决的问题.我想用solve/1.

先感谢您.

cod*_*der 6

你可以写:

:- use_module(library(clpfd)).

solve(X+Y=Z):-X+Y#=Z.
Run Code Online (Sandbox Code Playgroud)

一些例子:

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

?- solve(5+8=ANS).
ANS = 13.
Run Code Online (Sandbox Code Playgroud)

要解决它没有库你可以写:

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.
Run Code Online (Sandbox Code Playgroud)

再次举例:

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

?- solve(5+8=Ans).
Ans = 13.
Run Code Online (Sandbox Code Playgroud)