Cum sa faci un fapt negativ în PROLOG

voturi
0

Dacă am un fapt „Anna este o persoană“ în PROLOG am scrie, de exemplu:

person(anna).

Dar ce am scris dacă am un fapt „tabel nu este o persoană“. am incercat

not(person(table)).

Dar acest lucru nu funcționează. Cum pot scrie fapte negative?

Întrebat 09/10/2019 la 12:54
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

În Prolog, de obicei, nu trebuie să-și afirme negativ ca un fapt. Absența faptului pozitiv sau demonstrarea rezultatelor regulii în eșec (sau, mai precis, „lipsa de provability“).

Deci , dacă afirma doar că person(anna), atunci interogarea person(anna).va fi adevărat (reuși, sau să fie demonstrabilă), dar person(table).va fi fals (nu, sau nu este demonstrabilă) , cum era de așteptat. De asemenea, interogarea, person(X).va produce doar X = annacum era de așteptat.

În mod implicit, dacă interogați person(X)și nu există persoane definite, Prolog va da o eroare care indică faptul că personeste un predicat necunoscut. Dacă v - ar mai degrabă că Prolog pur și simplu eșuează în acest caz, există o opțiune puteți seta (eu știu în SWI Prolog , în special, dar nu - mi amintesc ce opțiunea este), sau puteți declara person/1a fi un predicat dinamic dacă ați planul de a afirma personfapte în baza de date în mod dinamic ca programul se execută.

Ca parte a unei definiții predicat, ați putea dori să indice faptul că un animal cu sânge cald este un mamifer, dar nu este o persoană. În acest caz, s-ar putea avea:

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

Acesta este un pic contrived la fel ca un exemplu. În acest caz, ai mai multe sanse de a defini , mammalîn ceea ce privește caracteristica a fi cu sânge cald, etc, mai degrabă decât invers. Dar ai idee ... Rețineți că operatorul not/1este depreciat în favoarea standardului ISO \+/1.

Publicat 09/10/2019 la 16:35
sursa de către utilizator

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