Ifi6057lab3demo1: erinevus redaktsioonide vahel
Mine navigeerimisribale
Mine otsikasti
Uus lehekülg: 'Elementaarne Prolog: surelikud filosoofid. mortal(X):- person(X). mortal(X):- dead(X). person(sokrates). dead(platon). Iseseisev agent kollimaailmas. Suht poolik, aga...' |
PResümee puudub |
||
| 8. rida: | 8. rida: | ||
dead(platon). | dead(platon). | ||
Iseseisev agent kollimaailmas. Suht poolik, aga suudab auke vältida. <code>move(M, 2).</code> küsib, mis on õige käik ajahetkel 2. See järgib teadmusbaasiga agendi arhitektuuri, kus olek ajas muutub ning tegevusi järeldatakse vastavalt hetkeolukorrale. Peale käiku peaks agendile <code>tellkb(breeze(2))</code> stiilis ütlema, mida tema sensorid tajuvad (<code>tellkb/1</code>: lisa asju teadmusbaasi). | Iseseisev agent kollimaailmas. Suht poolik, aga suudab auke vältida. <code>move(M, 2).</code> küsib, mis on õige käik ajahetkel 2. See järgib teadmusbaasiga agendi arhitektuuri, kus olek ajas muutub ning tegevusi järeldatakse vastavalt hetkeolukorrale. Peale käiku peaks agendile <code>tellkb(breeze(2)).</code> stiilis ütlema, mida tema sensorid tajuvad (<code>tellkb/1</code>: lisa asju teadmusbaasi). | ||
:- dynamic(breeze/1). | :- dynamic(breeze/1). | ||
Viimane redaktsioon: 18. november 2015, kell 20:17
Elementaarne Prolog: surelikud filosoofid.
mortal(X):- person(X). mortal(X):- dead(X). person(sokrates). dead(platon).
Iseseisev agent kollimaailmas. Suht poolik, aga suudab auke vältida. move(M, 2). küsib, mis on õige käik ajahetkel 2. See järgib teadmusbaasiga agendi arhitektuuri, kus olek ajas muutub ning tegevusi järeldatakse vastavalt hetkeolukorrale. Peale käiku peaks agendile tellkb(breeze(2)). stiilis ütlema, mida tema sensorid tajuvad (tellkb/1: lisa asju teadmusbaasi).
:- dynamic(breeze/1). :- dynamic(stench/1). :- dynamic(agentpos/3). agentpos(1,1,1). breezy(X, Y):- agentpos(X, Y, T), breeze(T). smelly(X, Y):- agentpos(X, Y, T), stench(T). nopit(X, Y):- visited(L, Y), X is L + 1, \+ breezy(L, Y). nopit(X, Y):- visited(R, Y), X is R - 1, \+ breezy(R, Y). nopit(X, Y):- visited(X, U), Y is U - 1, \+ breezy(X, U). nopit(X, Y):- visited(X, D), Y is D + 1, \+ breezy(X, D). % kuna me kasutame agentpos-i, siis me oskame sealt uusi koordinaate % tuletada ja legal/1 predikaadiga kontrollida. Alternatiiv oleks Prologile % lihtsalt ütelda, mis koordinaadid olemas on. %coord(1). %coord(2). %coord(3). %coord(4). legal(X):- X > 0, X < 5. visited(X, Y):- agentpos(X, Y, _). safe(X, Y):- visited(X, Y). safe(X, Y):- nopit(X, Y). % nowumpus(X, Y). ismove(up). ismove(left). ismove(right). ismove(down). newpos(X, Y, up, T):- agentpos(X, D, P), Y is D + 1, T is P + 1, legal(Y). newpos(X, Y, left, T):- agentpos(R, Y, P), X is R - 1, T is P + 1, legal(Y). newpos(X, Y, right, T):- agentpos(L, Y, P), X is L + 1, T is P + 1, legal(Y). newpos(X, Y, down, T):- agentpos(X, U, P), Y is U - 1, T is P + 1, legal(Y). % küsi järgmist käiku, näit. move(M, 2). move(M, T):- ismove(M), newpos(X, Y, M, T), safe(X, Y), tellkb(agentpos(X, Y, T)). % anna teada uusi fakte, näit. tellkb(breeze(2)). tellkb(X):- asserta(X).