假设我有一个数字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.
这很有效。
BUT
我需要做大量的初步工作,基本上是事先解决,只是要求Prolog评估答案。
有没有办法可以获得Z和Y,而不事先解决X?
我不能只写像
这样的东西solve(X,Y,Z):- X is Y+Z, Z is 1/Y.
因为实例化错误。
答案 0 :(得分:3)
我认为你需要一个CAS来象征性地解决系统,就像你“手工”一样。这样的SW既不容易找到也不容易建立。
如果务实的方法可以为您完成,库(clprq)可以提供帮助:
:- [library(clpr)].
solve(X,Y,Z) :- {Y+Z=X, Z*Y=1}.
产量
?- 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}.
这有意义吗?