2016-04-03 3 views
3

J'ai récemment vu un programme en Prolog en utilisant le prédicat # =/2. Je regardais ce sur the SWI prolog website où ils l'ont défini commeQue signifie # = dans Prolog?

L'expression arithmétique X égale Y. Lorsque le raisonnement sur les entiers, remplacer est/2 par # =/2 pour obtenir des relations plus générales.

Ce que je ne comprends pas à ce sujet est comment peut-être plus « générale » # =/2 car il est que pour les entiers.

Répondre

6

De la documentation entry page:

Ils mettent en œuvre relations pures entre entiers expressions et peuvent être utilisés dans toutes les directions

Juste un exemple:

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

Cela semble simple, mais en réalité, il est plutôt difficile d'obtenir un tel résultat dans l'évaluation d'expression arithmétique classique.

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

Sur la page is/2, vous pouvez voir la signature

-Number is +Expr 

+Expr signifie qu'il doit meuler.

En outre, l'argument de gauche est/2 en fait devrait être atomique:

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

malgré nous savons la déclaration ci-dessus doit être vrai ...

Une note: le nom CLP (FD) est un peu un «euphémisme», comme l'a souligné @false, pourrait être nommé CLP (Z), puisque la finitude du domaine peut souvent être assouplie.