A negáció és megvalósítása vágóval, feltételes kifejezéssel ELL

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


  • fejezetek: 5.2-ben
  • fóliák: I.97-98, I.102, II.31

Negációra a \+ hívás használható (meghiúsulásos negáció), ami pont akkor fut le sikeresen, ha a hívás meghiúsul. Pl.:

	 | ?- X = 1. \+ X = 2.
	 X = 1 ?

A \+ hívás nem helyettesít be változót, és futása során legfeljebb egy megoldás áll elő. Viszont a "zárt világ feltételezés" miatt gondjaink támadhatnak a használatával. Ugyanis ami nem bizonyítható, azt úgy veszi, mintha nem lenne igaz. Pl. a családfás példában a \+ szuloje('Géza', X). hívással nem tud mit kezdeni. a válasza: true ?.
Negáció vágóval:

	neg(Kif) :- call(Kif), !, false.
	neg(Kif).

Feltételes kifejezéssel a következő módon valósítható meg: ( felt -> fail ; true ). Ez ekvivalens a \+ felt negációval.