web-dev-qa-db-fra.com

Signe «différent» dans Visual Prolog?

Je ne trouve aucune documentation sur le signe "différent" dans Visual Prolog. Veuillez fournir la bonne solution à 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).
25
Egor

Je ne sais pas ce que vous entendez par "pas égal" (ne s'unifie pas?), Mais vous pouvez essayer ceux-ci:

X \= Y
not(X = Y)
\+ (X = Y)
48
Kaarel

La documentation de la deuxième variante signalée par Kaarel se trouve dans la page cette référence Visual Prolog .

Cependant, le problème avec votre code va un peu plus loin. Vous devez attendre le test de non-égalité jusqu'à ce que les termes Personne et Sœur soient liés, alors réorganisez des choses comme ceci:

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

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

6
hardmath