fd_domain,方程式不起作用

时间:2012-04-02 09:21:51

标签: prolog clpfd

fd_domain([A, B, C], 0, 9), (A**(B+C)) #= ((A**B)*(A**C)).

也许有些解决方案?似乎没问题; P 我收到了特定的错误:

uncaught exception: error(instantiation_error,(#=)/2)

2 个答案:

答案 0 :(得分:2)

在YAP或SWI中,您可以使用library(clpfd),它也允许整数取幂。然而,传播并不是很强烈。

?- use_module(library(clpfd)).
?- [A,B,C] ins 0..9, A^(B+C) #= A^B*A^C.
A in 0..9,
A^C#=_A,
A^B#=_B,
A^_C#=_D,
C in 0..9,
B+C#=_C,
B in 0..9,
_B*_A#=_D,
_C in 0..18
?- abs(X) #=< 7^7^7.
X in -37598235267....

请注意,间隔不限于机器字大小,如2 ^ 32或2 ^ 64。

答案 1 :(得分:1)

电源功能似乎有局限性。在GNU Prolog doc中,我们会找到:

9.6.1 FD算术表达式
http://www.gprolog.org/manual/gprolog.html#htoc329

列出了错误条件:

错误
子表达式的形式为_ ** E,E是变量instantiation_error

再见