"Pas égal" dans Visual Prolog?

Je ne trouve aucune documentation sur le signe "not equal" dans Visual Prolog. Veuillez fournir la solution de ce problème:

class predicates
        sister : (string Person, string Sister) nondeterm(o,o).
    clauses
        sister(Person, Sister) :-
            Person [not-equal-sign] Sister,
            parent(Person, Parent),
            parent(Sister, Parent),
            woman(Sister).
23
demandé sur Mateusz Piotrowski 2011-09-20 16:32:37

2 réponses

Je ne sais pas ce que vous voulez dire par "pas égal" (n'unifie pas?), mais vous pouvez essayer ces:

X \= Y
not(X = Y)
\+ (X = Y)
42
répondu Kaarel 2011-09-20 12:49:59

La Documentation pour la seconde variante pointée par Karel peut être trouvée dans c'Visual Prolog référence page.

Cependant le problème avec votre code va un peu plus loin. Vous devez attendre pour tester la non-égalité jusqu'à ce que les Termes "personne" et "sœur" soient liés, alors réarrangez les choses comme ceci:

    sister(Person, Sister) :-
        parent(Person, Parent),
        parent(Sister, Parent),
        not(Person = Sister),
        woman(Sister).

il y a aussi une syntaxe pour un opérateur infix "<>" qui signifie distinct (ou différent). Une fois les deux termes liés, cela devrait donner même résultat que de vérifier si les termes ne peuvent pas être unifiés, ce qui est ce que fait la construction ci-dessus.

6
répondu hardmath 2018-01-03 21:35:39