2016-04-03 21 views
3

Ich habe kürzlich ein Programm in Prolog mit dem Prädikat # =/2 gesehen. Ich sah diese auf the SWI prolog website, wo sie es alsWas bedeutet # = in Prolog?

definiert

Der arithmetische Ausdruck X Y. gleich Wenn über ganze Zahlen Argumentation, ersetzen wird/2 von # =/2 allgemeinere Beziehungen zu erhalten.

Was ich nicht über das verstehen ist, wie # =/2 kann mehr ‚allgemeine‘ sein, da es nur für ganze Zahlen ist.

Antwort

6

Aus der Dokumentation entry page:

Sie implementieren reine Beziehungen zwischen ganzzahligen Ausdrücke und kann in alle Richtungen

Nur ein Beispiel verwendet werden:

?- X+3 #= X*2. 
X = 3. 

Sieht einfach aus, aber es ist ziemlich schwierig, ein solches Ergebnis innerhalb der herkömmlichen arithmetischen Ausdruckauswertung zu erhalten.

?- X+3 is X*2. 
ERROR: is/2: Arguments are not sufficiently instantiated 

Vom is/2 Seite können Sie die Signatur

-Number is +Expr 

sehen, wo +Expr bedeutet es Boden sein muss.

Auch das linke Argument von/2 ist eigentlich sollte atomar sein:

?- 3+3 is 3*2. 
false. 

trotz wir wissen die obige Aussage wahr sein sollte ...

Ein Hinweis: Der Name CLP (FD) ist ein bisschen ein "Understatement", wie von @false hingewiesen, könnte CLP (Z) genannt werden, da die Endlichkeit der Domäne oft entspannt werden kann.