Comment faire un fait négatif en Prolog

voix
0

Si j'ai un fait « Anna est une personne » en Prolog j'écris par exemple:

person(anna).

Mais que dois-je écrire si j'ai un fait « table n'est pas une personne ». j'ai essayé

not(person(table)).

Mais cela ne fonctionne pas. Comment puis-je écrire des faits négatifs?

Créé 09/10/2019 à 12:54
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

En Prolog, en général, vous ne devez pas affirmer le négatif comme un fait. L'absence du fait positif ou un résultat de règles prouvant par un échec (ou plus exactement, « manque de prouvable »).

Donc , si vous prétendez seulement person(anna), la requête person(anna).sera vrai (réussir, ou être démontrable), mais person(table).sera faux (échec, ou non prouvable) comme prévu. En outre, la requête, person(X).ne cède le pas X = annacomme prévu.

Par défaut, si vous interrogez person(X)et il n'y a pas de personnes définies, Prolog donnera une erreur indiquant que personest un prédicat inconnu. Si vous préférez que Prolog échoue simplement dans ce cas, il y a une option que vous pouvez définir (je sais dans SWI Prolog en particulier, mais je ne me rappelle pas ce que l'option est), ou vous pouvez déclarer person/1être un prédicat dynamique si vous l' intention d'affirmer des personfaits dans votre base de données dynamique à mesure que le programme exécute.

Dans le cadre d'une définition sous-jacente, vous pouvez indiquer qu'un animal à sang chaud est un mammifère mais pas une personne. Dans ce cas, vous pourriez avoir:

warm_blooded_animal(X) :-
    mammal(X),
    \+ person(X).

Ceci est un peu artificiel comme un exemple. Dans ce cas, vous définir plus probable mammalen termes de la caractéristique d'être à sang chaud, etc., plutôt que l'inverse. Mais vous avez l'idée ... Notez que l'opérateur not/1est dépréciée en faveur de la norme ISO \+/1.

Créé 09/10/2019 à 16:35
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more