Példa arra, hogy a nyelvi prologon hiba (opn) és csonkolás és visszagörgetés (oo)

Egy egyszerű példája a "vágás és visszahúzás" és a "sikertelen kijavítás" módszerének használatára a Prolog nyelvben történő ciklusok megszervezéséhez:

% Ez a példa azt mutatja be, hogyan lehet sokféle megoldást kapni.






A módszereket használják: visszaállítás a meghibásodás után (ARF) és a csonkolás és visszaszorítás (RO)


% Cél: különböző gyermeklistákat kapni

predikátumok
nondeterm gyermek (szimbólum, szimbólum)

all_childs
all_childs_Alisa
all_childs_before_Diana
first_child_Alisa

kikötések
Gyermekalap
gyermek (Timur, Kozlov).
gyermek ("Alice", "Popova").
gyermek ("Eugene", "Kuznetsova").
gyermeke ("Olya", "Frolova").
gyermek ("Alice", "Shapochka").
gyermek ("Peter", "Ivanov").
gyermek ("Alice", "Rublev").


% Az összes gyermek listája - A visszaesés módja a meghibásodás után (OPN)
all_childs: - gyermek (X, Y), írjon (X, "", Y), nl, sikertelen.

% Az Alice nevű gyermekek listája - Retrace failure (ARF) módszer
all_childs_Alisa: - gyermek (X, Y), X = "Alice", írjon (X, Y), nl, sikertelen.








% Az összes gyermeknek a Diana befogadásáig terjedő listája - A vágás és visszafolyás módja (OO)
all_childs_before_Diana: - gyermek (X, Y), írjon (X, Y), nl, X = "Diana".

% Az első, Alice nevű gyermek - A vágás és visszahúzás módja (OO)
first_child_Alisa: - gyermek (X, Y), X = "Alice", írj (X, Y), nl.

cél
% write ("Minden gyermek listája:"), nl, all_childs.
% write ("Gyermekek listája Alice:"), nl, all_childs_Alisa.
% write ("A gyermekek listája egészen a Diana befogadóig:"), nl, all_childs_before_Diana.
írj ("Az első gyermek, akit Alice-nek hívnak:"), nl, first_child_Alisa.


A felkiáltójelet a prológ (az úgynevezett operátor cut-off), ha a magyarázatot az ujjak, működik valami ilyesmit: „!” Ha volt a csapat teljesítményét, még ha okozta a korábbi szabályok voltak más megoldást megfontolásra - rollback, hogy ez a szabály még mindig nem lenne tett. Tiltottuk a visszahúzást és más megoldások keresését.

Tovább (A, 3): - A<3.
Tovább (A, 5): - A<5.
Tovább (A, 8): - A<8.

A cél nagyobb (4, szám).

Visszaadja a választ: szám = 5.

Bár volt két lehetséges válasz: 4 és 8. De mielőtt az utolsó szabály ellenőrizték volna, nem jutottunk el, mert a "Több (A, 5)" szabályban: -<5. " запретил нам откатываться к предыдущим правилам своим восклицательным знаком, на который Пролог наткнулись, когда нашёл решение "число=5".

Sam összefutott az írásában, de ez érthető és gyorsan megmagyarázható))