2012-04-02 43 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等機器字大小。