![]() |
![]() |
![]() |
![]() |
seis(ida,ida,ida,ida)
ja lõpeb seisus seis(laane,laane,laane,laane)
.
mine
:alusta :-
mine(seis(ida,ida,ida,ida), seis(laane,laane,laane,laane)).
mine(Seis, Eesmark) :-
seisujada
esimene ja teine atribuut näitavad
üleviimise alg- ja lõppseisu; kolmandaks attribuudiks
on seni esinenud seisude jada (selle abil kontrollitakse, et seisud
ei hakkaks korduma) ja neljas on vajalik vaid selle seisude jada
edasiandmiseks eesmärgi saavutamisel: kui esimene ja teine argument on samad, s.t. eesmärk on saavutatud, saab neljas argument võrdseks kolmandaga (enne seda on ta muutuja).member(Liige, List)
kontrollib, kas Liige
esineb nimistus List
; kuna see predikaat on defineeritud moodulis Util.pro
(se ei ole süsteemipredikaat!), tuleb enne selle kasutamist kindlasti laadida kas Util.pro
või Util.plm
(käsuga consult('Util.pro')
või consult('Util.plm')
).
seisujada(Eesmark, Eesmark, Nimistu, Nimistu) :-
!.
seisujada(Seis, Eesmark, Nimistu, L1) :-
ylesoit(Seis, Seis1),
not hadaohtlik(Seis1),
not member(Seis1, Nimistu),
seisujada(Seis1, Eesmark, [Seis1|Nimistu], L1).
ylesoit(seis(Rand1, Rand1, Kits, Kapsad),
seis(Rand2, Rand2, Kits, Kapsad)) :-
vastaspoolne(Rand1, Rand2).
ylesoit(seis(Rand1, Hunt, Rand1, Kapsad),
seis(Rand2, Hunt, Rand2, Kapsad)) :-
vastaspoolne(Rand1, Rand2).
ylesoit(seis(Rand1, Hunt, Kits, Rand1), seis(Rand2,
Hunt, Kits, Rand2)) :-
vastaspoolne(Rand1, Rand2).
ylesoit(seis(Rand1, Hunt, Kits, Kapsad), seis(Rand2,
Hunt, Kits, Kapsad)) :-
vastaspoolne(Rand1, Rand2).
vastaspoolne(ida, laane).
vastaspoolne(laane, ida).
hadaohtlik(seis(Farmer, Rand1, Rand1,_)) :-
vastaspoolne(Farmer, Rand1).
hadaohtlik(seis(Farmer, _, Rand1, Rand1)) :-
vastaspoolne(Farmer, Rand1).
naita_lahendus
esitab predikaadi naita_ylesoit
abil iga kahe järjestikuse seisu vahel esinenud ülesõidud:
naita_lahendus([T1,T2|T]) :-
!,
naita_ylesoit(T2,T1),
naita_lahendus([T2|T]).
naita_lahendus(_).
naita_ylesoit(seis(Rand1, Hunt, Kits,
Kapsad), seis(Rand2, Hunt, Kits, Kapsad)) :-
!,
write('Farmer siirdub jõe '),
write(Rand1),
write('rannalt '),
write(Rand2),
write('rannale.'),
nl.
naita_ylesoit(seis(Rand1, Rand1, Kits,
Kapsad), seis(Rand2, Rand2, Kits, Kapsad)) :-
!,
write('Farmer saadab hundi jõe '),
write(Rand1),
write('rannalt '),
write(Rand2),
write('rannale.'),
nl.
naita_ylesoit(seis(Rand1, Hunt, Rand1,
Kapsad), seis(Rand2, Hunt, Rand2, Kapsad)) :-
!,
write('Farmer viib kitse jõe '),
write(Rand1),
write('rannalt '),
write(Rand2),
write('rannale.'),
nl.
naita_ylesoit(seis(Rand1, Hunt, Kits,
Rand1),seis(Rand2, Hunt, Kits, Rand2)) :-
!,
write('Farmer viib kapsad jõe '),
write(Rand1),
write('rannalt '),
write(Rand2),
write('rannale.'),
nl.
Ülesanne