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

也许一些解决方案?似乎还可以;P 我收到了那个特定的错误:

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

2 回答 2

1

幂函数似乎有局限性。在 GNU Prolog 文档中找到:

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

列出了错误情况:

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

再见

于 2012-04-02T10:08:35.160 回答
1

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

?-使用模块(库(clpfd))。
?- [A,B,C] ins 0..9, A^(B+C) #= A^B*A^C。
0..9 中的 A,
A^C#=_A,
A^B#=_B,
A^_C#=_D,
0..9 中的 C,
B+C#=_C,
B 在 0..9 中,
_B*_A#=_D,
_C 在 0..18
?- abs(X) #=< 7^7^7。
X在-37598235267....

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

于 2012-04-02T11:10:05.527 回答