2012-04-02 45 views
2
fd_domain([A, B, C], 0, 9), (A**(B+C)) #= ((A**B)*(A**C)). 

也许有些解决方案?似乎确定,P 我收到的特定错误:fd_domain,方程不起作用

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

回答

1

电源功能似乎有局限性。在GNU Prolog的DOC魏某发现:

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

即没有列出一个错误条件:

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

再见

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等机器字大小。