fd_domain([A, B, C], 0, 9), (A**(B+C)) #= ((A**B)*(A**C)).
也许有些解决方案?似乎没问题; P 我收到了特定的错误:
uncaught exception: error(instantiation_error,(#=)/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
再见