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

Vielleicht einige Lösungen? Scheint ok; P ich, dass bestimmte Störung erhalte:fd_domain, Gleichung funktioniert nicht

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

Antwort

1

Die Power-Funktion Einschränkungen zu haben scheint. In der GNU Prolog doc Wie finden:

9.6.1 FD arithmetische Ausdrücke
http://www.gprolog.org/manual/gprolog.html#htoc329

Dass es ein Fehler ist aufgeführt:

Fehler
ein Unterausdruck von der Form _ * * E und E ist eine Variable instantiation_error

Bye

2

In YAP oder SWI können Sieverwenden, was auch eine Ganzzahl-Exponentiation erlaubt. Die Vermehrung ist jedoch nicht sehr stark.

 
?- 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.... 

Bitte beachten Sie, dass die Intervalle nicht auf Maschinenwortgrößen wie 2^32 oder 2^64 beschränkt sind.