45 votes

Quel est le « non » logique dans Prolog ?

Le problème auquel je suis confronté est un peu banal. Je veux utiliser la logique pas dans Prolog, mais il semble que not/1 n'est pas la chose que je veux :

course(ai).
course(pl).
course(os).

have(X,Y) :- course(X),course(Y),not(X = Y).

Je demande :

have(X,Y), write(X-Y), nl , fail.

Et je n'obtiens pas le résultat que je veux :(

15voto

larsmans Points 167484

Dans SWI-Prolog et GNU Prolog, ce qui suit devrait fonctionner :

have(X, Y) :- course(X), course(Y), X \= Y.

Dans SWI-Prolog, vous pouvez également utiliser dif/2, ce qui peut être plus pratique puisque vous pouvez l'utiliser plus tôt dans le prédicat :

have(X, Y) :- dif(X, Y), course(X), course(Y).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X