使用 Prolog 的具有一个未知数的线性方程
Linear equation with one unknown using Prolog
我想知道如何解一个未知数的基本线性方程。
我尝试通过字符串拆分来获得求解方程式所需的一切,但我确信有更好的方法。
solve(5 + X = 10).
X = 5.
solve(5+8 = Ans).
Ans = 13.
这就是我要解决的问题。我想使用 solve/1.
提前谢谢你。
你可以这样写:
:- 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.
我想知道如何解一个未知数的基本线性方程。
我尝试通过字符串拆分来获得求解方程式所需的一切,但我确信有更好的方法。
solve(5 + X = 10).
X = 5.
solve(5+8 = Ans).
Ans = 13.
这就是我要解决的问题。我想使用 solve/1.
提前谢谢你。
你可以这样写:
:- 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.