fd_domain, уравнение не работает - PullRequest
2 голосов
/ 02 апреля 2012
fd_domain([A, B, C], 0, 9), (A**(B+C)) #= ((A**B)*(A**C)).

Может быть, какие-то решения?Кажется, хорошо; P Я получаю эту конкретную ошибку:

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

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

В YAP или SWI вы можете использовать library(clpfd), что также допускает целочисленное возведение в степень. Однако распространение не очень сильное.

?- <b>use_module(library(clpfd)).</b>
?- <b>[A,B,C] ins 0..9, A^(B+C) #= A^B*A^C.</b>
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
?- <b>abs(X) #=< 7^7^7</b>.
X in -37598235267....

Обратите внимание, что интервалы не ограничиваются машинными словами, такими как 2 ^ 32 или 2 ^ 64.

1 голос
/ 02 апреля 2012

Кажется, что функция мощности имеет ограничения.В документе GNU Prolog wie найти:

9.6.1 арифметических выражений FD
http://www.gprolog.org/manual/gprolog.html#htoc329

что имеется перечисленное условие ошибки:

ошибки
подвыражение имеет вид _ ** E и E является переменной instantiation_error

Bye

...