Jam*_*tos 10 declarative algebra prolog clpfd clpq
我读了一篇关于Prolog和Logic Programming的简短文章.我很好奇逻辑程序是否可以进行代数.就像你能问出X的变量在等式5 + X = 7中得到什么并得到-2的答案?
mat*_*mat 12
所有严肃的Prolog系统都在有限域上提供约束逻辑编程,简称为CLP(FD),您可以使用它轻松地解决许多此类方程.例如,使用SICStus Prolog,SWI和Yap:
?- use_module(library(clpfd)).
true.
?- 5+X #= 7.
X = 2.
Run Code Online (Sandbox Code Playgroud)
显然,答案是2而不是-2.还要检查其他域上的约束逻辑编程,例如库(clpq)的有理数.
是的,Prolog可以做代数.
如果您使用Google for Prolog和CAS(计算机代数系统),您将获得大量结果.
如果您了解Prolog = Syntactic unification + backward-chaining + REPL,
然后意识到解决问题/方程的核心是统一,你可能会遇到用于解决包含等于(=)的问题的等式推理.同样的逻辑也用于自动定理证明器和证明助手.
如果你看这里你会发现prolog.ml在这个自动化定理证明器中实现了统一和反向链接.
您还应该检查术语重写并搜索Google以进行术语重写,以了解有关使用术语求解方程式的科学的更多信息.
这个怎么样?请注意,这仅适用于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.
Run Code Online (Sandbox Code Playgroud)
你可以问:
equation(5,X,7).
X = 2 .
?- equation(2,5,X).
X = 7.
?- equation(X,5,7).
X = 2
Run Code Online (Sandbox Code Playgroud)