Val*_*eri 5 prolog constraint-programming equation-solving
假设我有一个数字X,我希望求解方程组,比如Y + Z = X,Z*Y = 1.
现在,这具有解Y = 1/Z和Z =(sqrt(X*X-4)+ X)/ 2或(X-(sqrt(X*X-4)))/ 2.
所以我可以在Prolog中写道:
solve(X,Y,Z):- Y is (sqrt(X*X-4)+X)/2, Z is 1/Y.
solve(X,Y,Z):- Y is (X-(sqrt(X*X-4)))/2,Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)
这有效.
但
它需要我的许多初步工作,基本上事先解决它,只是要求Prolog评估答案.
有没有办法可以获得Z和Y,而不事先解决X?
我不能只写像
solve(X,Y,Z):- X is Y+Z, Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)
因为实例化错误.
我认为你需要一个 CAS,来象征性地解决系统问题,就像你“手工”所做的那样。这样的软件既不容易找到,也不容易构建。
如果务实的方法可以为您做到这一点,库(clprq)可以帮助您:
:- [library(clpr)].
solve(X,Y,Z) :- {Y+Z=X, Z*Y=1}.
Run Code Online (Sandbox Code Playgroud)
产量
?- solve(3,Y,Z).
{Z=3.0-Y, -1.0+Z*Y=0.0},
{-1.0+Z*Y=0.0},
{-1.0+Z*Y=0.0}.
Run Code Online (Sandbox Code Playgroud)
这有道理吗?