用Prolog求解方程组

用Prolog求解方程组,prolog,equation-solving,constraint-programming,Prolog,Equation Solving,Constraint Programming,假设我有一个数字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. 这很有效 但是 这需要我做大量的准备工作,基本上是事先解决问题,然后让Prolog评估答案 有没有什么方法

假设我有一个数字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.
这很有效

但是

这需要我做大量的准备工作,基本上是事先解决问题,然后让Prolog评估答案

有没有什么方法可以得到Z和Y,而不用事先解X

我不能只写这样的东西

solve(X,Y,Z):- X is Y+Z, Z is 1/Y.

由于实例化错误。

我认为您需要一个CAS来象征性地解决系统问题,就像您“手工”解决的那样。这样的软件既不容易找到,也不容易构建

如果一种实用的方法可以为您做到这一点,那么library()将有助于:

:- [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}.

这有意义吗?

老实说,不太有意义,但我认为我可以为二次多项式编写一个求解器,然后使用它。不过还是要谢谢你。为什么这样的软件很难找到?它不存在吗?Prolog不存在吗?@ErikAllik:这是一个相当困难的话题,我不知道有哪个网站可以下载CAS。至少在一本书中(google for The art of Prolog,由Sterling Shapiro撰写),CAS是一章的主题,也许可以作为一个起点来实现…@ErikAllik:嗯,我搜索得不够好,我找到了PRESS到一个更好的PRESS is下载链接(从)