【发布时间】:2014-10-14 20:24:47
【问题描述】:
我有一个非常简单的方程,我希望能够在 prolog 中求解:
A = B + C
我希望能够编写一个表达这种关系的谓词,它可以处理任何一个未实例化的参数。无需推广到更复杂的关系或方程。
myEquation(A, B, C) :-
...something...
我可以用以下语义调用:
myEquation(A,1,2).
> A = 3.
myEquation(3,B,2).
> B = 1.
myEquation(3,1,C).
> C = 2.
有什么想法吗?使用算术运算符会产生很多“参数没有充分实例化”的错误。看起来求解任意方程组超出了大多数 prolog 实现的范围,但我希望这个极其简单的方程易于处理。
【问题讨论】:
-
这并不超出大多数 Prolog 实现的范围。你只需要做一点阅读。 ;) 你看过 CLP(约束逻辑编程)库吗?
-
见plus/3
-
谢谢 lurker 和 CapelliC。我在一个非常小的 golang prolog 环境中工作,并且 CLP 库有点重(虽然很棒!感谢指针)。看看 plus/3 的实现让我开始了比赛。
-
你也可以通过检查给定的变量来编写你的谓词“长手”(没有
plus/3)。例如,如果A是整数,则integer(A)将为真。只需要几个子句或一个 if-then-else 结构来检查每个案例。
标签: prolog constraint-programming