je définissais ma base de connaissances:Prolog Cut opérateur
edge(mammal,isa,animal).
edge(human,isa,mammal).
edge(simba,isa,human).
edge(animal,swim,bybirth).
edge(human,swim,mustlearn).
path(X,Y) :- edge(X,isa,Y).
path(X,Y) :- edge(X,isa,Z), path(Z,Y).
swim(X,Y) :- edge(X,swim,Y).
swim(X,Y) :- path(X,Z), swim(Z,Y).
Maintenant, utiliser la base de connaissances ci-dessus, j'utilise les éléments suivants:
?- swim(simba,bybirth).
?- swim(simba,mustlearn).
Et pour les deux requêtes, Prolog renvoie true . Je veux que Prolog vérifie d'abord la propriété nager localement, puis regarde le parent direct, et ainsi de suite de façon hiérarchique. Et il devrait cesser de chercher dès que nous savons que Simba "doit apprendre" à nager, et ne devrait pas regarder plus loin. Ainsi, il devrait renvoyer false pour la première requête et true pour la seconde.
Je sais que cela doit être fait en limitant le retour arrière. J'ai essayé d'utiliser les opérateurs coupés et non, mais je ne pouvais pas réussir. Y a-t-il un moyen d'y parvenir?