J'ai lu à ce sujet dans un livre mais cela n'a pas été expliqué du tout. Je ne l'ai pas non plus vu dans un programme. Fait partie de la syntaxe de prolog? C'est pour quoi? L'utilisez-vous? P>
3 Réponses :
Il représente implication em>. Le côté droit n'est exécuté que si le côté gauche est vrai. Ainsi, si vous avez ce code, ?- implication(a).
Argument a received.
true.
?- implication(b).
Argument b received.
true.
?- implication(c).
Received unknown argument.
true.
Attendez, si c'est implicitement, alors logique faux -> faux code> devrait donner
vrai code>, quand il ne le fait pas. Qu'est-ce qui est avec ça?
@ Błażejmicalik n'est pas une implication logique, mais un impératif si, alors, d'autre, avec une coupe implicite à l'intérieur.
C'est une version locale de la coupe, voir par exemple le Section sur le contrôle prédique dans le manuel SWI.
Il est principalement utilisé pour mettre en œuvre si, alors, d'autre par (condition -> vraie branche; fausse branche). Une fois que la condition réussit, il n'ya pas de backtracking de la branche vraie dans la maladie ou dans la fausse branche, mais la récupération de l'if-the-ele est toujours possible: p> Par conséquent, il est appelé une coupe locale. P> p>
La coupe douce est disponible en SWI via "* ->", pas "->"!
Il est possible d'éviter d'utiliser en écrivant quelque chose de plus verbal. Si je réécrite Stephan's A> Prédicat: implication(X) :-
(
X = a,
write('Argument a received.'), nl
;
X = b,
write('Argument b received.'), nl
;
X \= a,
X \= b,
write('Received unknown argument.'), nl
).
Hmm. Je ne suis pas tant dans Prolog, mais cela semble violer le principe sec. Je ne sais pas si ça vaut le coup! Je veux dire, surtout si les conditions préalables deviennent légèrement plus complexes, cela peut devenir désordonné. Quant à la mise en arrière: pour cette version (SWI-) PROG ne retourne pas immédiatement à l'invite sur implicitement (a) code> et
implication (B) code>, donc en effet de la ramification tenté.
Oui, je ne dis certainement pas que c'est une alternative supérieure, c'est une alternative. :)
Je lis cela pourrait être utilisé pour écrire des analyseurs. Somme -> o1 + o2 ou quelque chose ...
C'est -> (Notez les deux caractères), voir le manuel SWI: SWI-PROLOGR.ORG/PLDOC/...