2011-09-20 13 views
20

Nie mogę znaleźć żadnej dokumentacji dotyczącej znaku "nie równego" w Visual Prolog. Podaj właściwe rozwiązanie tego problemu:Znak "Nie równe" w Visual Prolog?

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). 

Z góry dziękuję!

Odpowiedz

37

Nie wiem co masz na myśli mówiąc „nie równa się” (nie ujednolicić?), Ale można spróbować to:

X \= Y 
not(X = Y) 
\+ (X = Y) 
+1

Dzięki, drugi wariant działał idealnie! – Egor

+4

Czy są różnice między tymi opcjami? – alaboudi

4

Dokumentacja dla drugiego wariantu podkreślił Kaarel można znaleźć na stronie this Visual Prolog reference.

Jednak problem z kodem jest trochę głębszy. Trzeba czekać do testowania braku równości aż oba terminy Person i siostra są związane, więc zmienić rzeczy tak:

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

Istnieje również składnia dla operatora Infix „<>”, co oznacza wyraźny (lub inna). Po związaniu tych dwóch warunków powinno to dawać taki sam wynik, jak sprawdzenie, czy warunki nie mogą zostać zunifikowane, co stanowi powyższa konstrukcja.