10

我读了一篇关于 Prolog 和逻辑编程的简短文章。我很好奇逻辑程序是否可以做代数。就像你能问方程 5+X = 7 中 X 的变量是什么并得到 -2 的答案吗?

4

4 回答 4

15

所有严肃的 Prolog 系统都提供有限域上的约束逻辑编程,简称 CLP(FD),您可以使用它轻松求解许多此类方程。例如,使用 SICStus Prolog、SWI 和 Yap:

?- use_module(library(clpfd)).
true.

?- 5+X #= 7.
X = 2.

显然,答案是 2 而不是 -2。还可以查看其他领域的约束逻辑编程,例如 library(clpq) 的有理数。

于 2012-12-03T20:52:28.060 回答
7

是的,Prolog 可以做代数。

如果你用谷歌搜索PrologCAS(计算机代数系统),你会得到很多结果。

例如使用 Prolog 作为 CAS

如果您了解 Prolog =语法统一+反向链接+ REPL

然后意识到统一是解决问题/方程式的核心,您可能会遇到用于解决包含等于 (=) 的问题的方程式推理。同样的逻辑也用于自动定理证明器证明助手

如果你看这里,你会发现prolog.ml,它在这个自动定理证明器中实现了统一和反向链接。

您还应该查看术语重写并在 Google 上搜索术语重写,以了解有关使用术语求解方程的科学的更多信息。

于 2012-12-10T00:52:21.830 回答
3

Prolog 中有一些计算机代数系统的实现,包括方程简化器和PRESS方程求解器。还有一些线性和非线性方程的约束求解器,包括CLP(R,Q)CLP (BNR) ,以及使用约束处理规则实现的其他几个求解器。

除了在 Prolog 中实现计算机代数系统,还可以在计算机代数系统中实现 Prolog 解释器。例如,有一篇文章描述了Mathematica 中基于规则的编程系统的实现。Wolfram Library Archive中的 Mathematica中还有一个逻辑编程系统的实现。

显然也可以使用 Sympy 的统一算法在 Sympy 中实现逻辑程序。

于 2018-07-31T22:57:14.940 回答
2

这个怎么样?请注意,这仅适用于X+Y=Z.

equation(X,Y,Z):- var(X),X is Z-Y.
equation(X,Y,Z):- var(Y),Y is Z-X.
equation(X,Y,Z):- var(Z),Z is X+Y.

你可以问:

equation(5,X,7).
X = 2 .
?- equation(2,5,X).
X = 7.
?- equation(X,5,7).
X = 2
于 2012-12-03T20:02:26.067 回答