2011-09-20 18 views
20

Non riesco a trovare alcuna documentazione sul segno "non uguale" in Visual Prolog. Si prega di fornire la giusta soluzione di questo problema:Segno "Non uguale" in 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). 

Grazie in anticipo!

risposta

37

Non so che cosa si intende per "non uguale" (non unificare?), Ma si potrebbe provare questi:

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

Grazie, la seconda variante ha funzionato perfettamente! – Egor

+4

Ci sono differenze tra queste opzioni? – alaboudi

4

Documentazione per la seconda variante sottolineato da Kaarel può essere trovato nella pagina this Visual Prolog reference.

Tuttavia, il problema con il codice va un po 'più in profondità. È necessario attendere per la prova della non uguaglianza fino a quando entrambi i termini Persona e sorelle sono legati, in modo da riorganizzare le cose in questo modo:

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

C'è anche sintassi per un operatore infisso "<>" che significa distinti (o diverso). Una volta che i due termini sono vincolati, questo dovrebbe dare lo stesso risultato di controllare se i termini non possono essere unificati, che è ciò che fa la costruzione precedente.