【发布时间】:2016-01-31 19:09:31
【问题描述】:
我在序言中有这个问题。问:创建一个规则 cubeLess(X,B,R),计算 3 的幂和余数,使得 b =x3+r。例如 cubeLess(2,10,R) 应该导致 R=2。 到目前为止,我已经编写了基本情况 cubeLess(0,0,0) 和 多维数据集(X,B,R):- X>0, X1 是 XXX, 我怎么从这里走?
【问题讨论】:
我在序言中有这个问题。问:创建一个规则 cubeLess(X,B,R),计算 3 的幂和余数,使得 b =x3+r。例如 cubeLess(2,10,R) 应该导致 R=2。 到目前为止,我已经编写了基本情况 cubeLess(0,0,0) 和 多维数据集(X,B,R):- X>0, X1 是 XXX, 我怎么从这里走?
【问题讨论】:
我们假设这里所有相关的数字都是整数。 使用 SWI-Prolog,我们可以使用clpfd:
:- use_module(library(clpfd))。接下来,我们像这样定义谓词cubeLess/3:
示例查询:
?- cubeLess(2, 10, R).
R = 2.
最一般的查询怎么样?
?- 多维数据集(X,B,R)。 X^3 #= _A, _A+R #= B。这里没有太多传播......但没关系!
如果您对地面解决方案感兴趣,请约束有限域,然后使用labeling/2。
【讨论】:
(=)/2 和 (#=)/2 之间存在差异。 “数字符号变体”由 clpfd 提供。