Advertisement
kikakr

flora

Sep 2nd, 2015
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.04 KB | None | 0 0
  1. Zadana je baza znanja:
  2. a : cvor [b r i d −>{b, c, d } ].
  3. b : cvor [b r i d −>{c, e } ].
  4. c : cvor [b r i d −>{e, d } ].
  5. d : cvor [b r i d −>f].
  6. e : cvor [b r i d −>f].
  7. f : cvor .
  8. ________________________________________
  9. Implementirajte metodu put/0 klase cvor koja vraca sve cvorove kojima je trenutni cvor povezan usmjerenom putanjom.
  10. Primjeri korištenja:
  11. flora2 ?− c [ put −>?x ] .
  12. ?x = d
  13. ?x = e
  14. ?x = f
  15. 3 solution (s) in 0.0000 seconds
  16. Yes
  17. flora2 ?− a [ put −>?x ] .
  18. ?x = b
  19. ?x = c
  20. ?x = d
  21. ?x = e
  22. ?x = f
  23. Rj.:
  24. ?c:cvor[put->?x]:-?c[brid->?x].
  25. ?c:cvor[put->?x]:-?c[brid->?y],?y[put->?x]
  26. ________________________________________
  27. Implementirajte metodu duljina/1 klase cvor koja za primljeni cvor vraca sve udaljenosti od trenutnog cvora.
  28. Primjeri koristenja:
  29. flora2 ?− a [ duljina ( c )−>?x ] .
  30. ?x = 1
  31. ?x = 2
  32. 2 solution ( s ) in 0.0040 seconds
  33. Yes
  34. flora2 ?− a [duljina ( e )−>?x ] .
  35. ?x = 2
  36. Rj.:
  37. ?c:cvor[duljina(?x)->1]:-?c[brid->?x].
  38. ?c:cvor[duljina(?x)->?d]:-?c[brid->?y],?y[duljina(?x)->?d1],?d is ?d1+1.
  39. ________________________________________
  40. Implementirajte klasu obojeni cvor koja naslijeduje iz klase cvor te ima dodatni atribut boja. Dodajte tri obojena cvora (x, y, z) koji imaju boje zuta, plava i zelena i imaju bridove k cvorovima a, b i c respektivno.
  41. Primjeri koristenja:
  42. flora2 ?− ?C : obojeni_cvor [boja−>?boja ,brid−>? brid] .
  43. ?C = x
  44. ? boja = zuta
  45. ? brid = a
  46. ?C = y
  47. ? boja = plava
  48. ? brid = b
  49. ?C = z
  50. ? boja = zelena
  51. ? brid = c
  52. Rj.:
  53. obojeni_cvor::cvor.
  54. x:obojeni_cvor[boja->zuta, brid->a].
  55. y:obojeni_cvor[boja->zelena, brid->b].
  56. z:obojeni_cvor[boja->zelena, brid->c].
  57. ________________________________________
  58. Izmjenite metodu put iz prvog zadatka tako da ona vrijedi samo za neobojene cvorove. Novu petodu nazovite put2/0.
  59. Primjeri koristenja:
  60. flora2 ?− x [ put −>?y ] .
  61. ?y = a
  62. ?y = b
  63. ?y = c
  64. ?y = d
  65. ?y = e
  66. ?y = f
  67. 6 solution (s) in 0.0000 seconds
  68. Yes
  69. flora2 ?− x [ put2 −>?y ] .
  70. No
  71. Rj.:
  72. ?c:cvor[put2->?x]:-?c[brid->?x],not(?c:obojeni_cvor),not(?x:obojeni_cvor).
  73. ?c:cvor[put2->?x]:-?c[brid->?y],?y[put2->?x],not(?c:obojeni_cvor),not(?x:obojeni_cvor),not(?y:obojeni_cvor).
  74.  
  75.  
  76.  
  77. Neka je zadana baza znanja:
  78. zaposlenik::osoba.
  79. kupac::osoba.
  80. menadzer::zaposlenik.
  81. direktor::menadzer.
  82. stefica:kupac.
  83. ivek:zaposlenik.
  84. joza:menadzer.
  85. bara:direktor.
  86. ivek[ placa->100 ].
  87. joza[ placa->200 ].
  88. bara[ placa->300 ].
  89. ________________________________________
  90. Implementirajte metodu ukupne_place koja će za zadanu klasu vratiti zbroj svih plaća objekata u toj klasi.
  91. Primjeri korištenja:
  92. flora2 ?- osoba[ ukupne_place->?p ].
  93. ?p = 600
  94. 1 solution(s) in 0.0100 seconds
  95. Yes
  96. flora2 ?- zaposlenik[ ukupne_place->?p ].
  97. ?p = 600
  98. 1 solution(s) in 0.0000 seconds
  99. Yes
  100. flora2 ?- menadzer[ ukupne_place->?p ].
  101. ?p = 500
  102. 1 solution(s) in 0.0000 seconds
  103. Yes
  104. flora2 ?- direktor[ ukupne_place->?p ].
  105. ?p = 300
  106. 1 solution(s) in 0.0000 seconds
  107. Yes
  108. Rj.:
  109. osoba[ukupne_place => integer].
  110. zaposlenik::osoba[placa => integer].
  111. ?osoba[ukupne_place -> ?ukupna_placa] :-
  112. ?ukupna_placa = sum{? _ g | ? _ :?osoba[placa->?_g]}.
  113. ________________________________________
  114. Implementirajte meta-predikat (naziv/funktor predikata je varijabilan) koji će omogućiti vraćanje liste objekata koji su u
  115. klasi zadanom nazivom predikata.
  116. Primjeri korištenja:
  117. flora2 ?- osoba( ?x ).
  118. ?x = [bara, ivek, joza, stefica]
  119. 1 solution(s) in 0.0100 seconds
  120. Yes
  121. flora2 ?- kupac( ?x ).
  122. ?x = [stefica]
  123. 1 solution(s) in 0.0000 seconds
  124. Yes
  125. flora2 ?- zaposlenik( ?x ).
  126. ?x = [bara, ivek, joza]
  127. 1 solution(s) in 0.0000 seconds
  128. Yes
  129. flora2 ?- menadzer( ?x ).
  130. ?x = [bara, joza]
  131. 1 solution(s) in 0.0000 seconds
  132. Yes
  133. flora2 ?- direktor( ?x ).
  134. ?x = [bara]
  135. 1 solution(s) in 0.0000 seconds
  136. Yes
  137. Rj.
  138. ?predikat(?x) :- ?x = collectset{?_g| ?_g:?predikat}.
  139.  
  140.  
  141.  
  142. Neka je zadana sljedeća baza znanja u F-logici:
  143. Joza:osoba[ roditelj->{ Stef, Bara }, spol->musko ].
  144. Stef:osoba[ roditelj->{ Stefica, Ivek }, spol->musko ].
  145. Bara:osoba[ roditelj->{ Slavek, Marica }, spol->zensko ].
  146. Ivek:osoba[ spol->musko ].
  147. Stefica:osoba[ spol->zensko ].
  148. Slavek:osoba[ spol->musko ].
  149. Marica:osoba[ spol->zensko ].
  150. ________________________________________
  151. Implementirajte metode baka i predak za klasu osoba. Primjeri korištenja:
  152. flora2 ?- ?x[ baka->?y ].
  153. ?x = Joza
  154. ?y = Marica
  155. ?x = Joza
  156. ?y = Stefica
  157. 2 solution(s) in 0.0000 seconds
  158. Yes
  159. flora2 ?- Joza[ predak->?y ].
  160. ?y = Bara
  161. ?y = Ivek
  162. ?y = Marica
  163. ?y = Slavek
  164. ?y = Stef
  165. ?y = Stefica
  166. 6 solution(s) in 0.0000 seconds
  167. Yes
  168. flora2 ?-
  169. Rj.:
  170. osoba [ roditelj = > osoba, spol = > string, baka = > osoba, predak = > osoba ].
  171. ?osoba[baka -> ?baka] :- ?osoba[roditelj->?roditelj], ?roditelj[roditelj->?baka], ?baka[spol->zensko].
  172. ?osoba[predak -> ?predak] :- ?osoba[roditelj->?predak].
  173. ?osoba[predak -> ?predak] :- ?osoba[predak -> ?x], ?x[roditelj->?predak].
  174. Joza:osoba[ roditelj->{ Stef, Bara }, spol->musko ].
  175. Stef:osoba[ roditelj->{ Stefica, Ivek }, spol->musko ].
  176. Bara:osoba[ roditelj->{ Slavek, Marica }, spol->zensko ].
  177. Ivek:osoba[ spol->musko ].
  178. Stefica:osoba[ spol->zensko ].
  179. Slavek:osoba[ spol->musko ].
  180. Marica:osoba[ spol->zensko ].
  181.  
  182.  
  183.  
  184. Implementirajte sljedeći UML dijagram u F-logici:
  185. http://arka.foi.hr/~mschatten/lp/uml_manageri.png
  186. Metoda podređeni prima naziv odjela i vraća listu podređenih datog menadžera.
  187. Primjerice neka je zadana sljedeća baza znanja:
  188. ivek:zaposlenik[ ime->Ivan, prezime->Presvetli, nadredjeni->bara, odjel->Marketing ].
  189. joza:zaposlenik[ ime->Josip, prezime->Prikratki, nadredjeni->bara, odjel->Marketing ].
  190. bara:menadzer[ ime->Barica, prezime->Jambrek ].
  191. Tada će se program ponašati na sljedeći način:
  192. flora2 ?- bara[ podredjeni( Marketing ) -> ?x ].
  193. ?x = [ivek, joza]
  194. 1 solution(s) in 0.0000 seconds
  195. Yes
  196. Rj.:
  197. zaposlenik [ ime => _string, prezime => _string, nadredjeni => menadzer, odjel => _string ].
  198. menadzer::zaposlenik[podredjeni(_string)=>zaposlenik].
  199. ?menadzer[podredjeni(?odjel)->?podredjeni] :-
  200. ?podredjeni = collectset{?_g| ?_g:zaposlenik[nadredjeni->?menadzer, odjel-> ?odjel]}.
  201. ivek:zaposlenik[ ime->Ivan, prezime->Presvetli, nadredjeni->bara, odjel->Marketing ].
  202. joza:zaposlenik[ ime->Josip, prezime->Prikratki, nadredjeni->bara, odjel->Marketing ].
  203. bara:menadzer[ ime->Barica, prezime->Jambrek ].
  204.  
  205.  
  206.  
  207. Neka je zadan modul kuca.flr koji definira objekte koji predstavljaju sobe u kući te trenutnu poziciju igrača.
  208. hodnik[vrata−>’dnevni boravak’, vrata−>’spavaca soba’].
  209. ’spavaca soba’[vrata−>kupaona].
  210. ’dnevni boravak’ [vrata−>kuhinja].
  211. kuhinja [sadrzi−>pizza].
  212. igrac[pozicija−>hodnik].
  213. ________________________________________
  214. 1.Potrebno je implementirati pravilo po kojem ́ce vrijediti da ako iz jedne sobe postoje vrata u drugu, tada postoje i vrata iz druge u prvu.
  215. Primjer korištenja:
  216. flora2 ?− kuhinja[vrata−>?soba].
  217. ? soba = dnevni boravak
  218. 1 solution (s) in 0.0000 seconds
  219. Rj.:
  220. ?x[vrata->?soba] :- ?soba[vrata->?x].
  221. ________________________________________
  222. 2.Potrebno je implementirati predikat put/2 koji ́ce provjeravati je li izmedu dvije sobe postoji put.
  223. Primjer korištenja:
  224. flora2 ?− put(hodnik, ?soba).
  225. ? soba = dnevni boravak
  226. ? soba = hodnik
  227. ? soba = kuhinja
  228. ? soba = kupaona
  229. ? soba = spavaca soba
  230. 5 solution(s) in 0.0000 seconds
  231. Rj.:
  232. put(?x,?soba):-?x[vrata->?soba1],?soba1[vrata->?soba].
  233. put(?x,?soba):-?x[vrata->?soba],?soba[vrata->?soba1],?soba1[vrata->?soba].
  234. ________________________________________
  235. 3.Potrebno je implementirati metodu idi/1 objekta igrac koja ́ce provjeriti je li za igrača postoji put u zadanu sobu te promijeniti njegovu poziciju.
  236. Primjeri korištenja:
  237. flora2 ?− igrac [idi (kuhinja)].
  238. Elapsed time 0.0000 seconds
  239. Yes
  240. flora2 ?− igrac [pozicija−>?soba].
  241. ? soba = kuhinja
  242. 1 solution(s) in 0.0000 seconds
  243. Rj.:
  244. ?i[idi(?soba)]:-?i[pozicija->?poz], ?poz[vrata->?soba], ?soba[vrata->?poz], delete{?i[pozicija->?poz]}, insert{?i[pozicija->?soba]},
  245. refresh{?i[pozicija->?soba]}, ?i[pozicija->?soba].
  246. ________________________________________
  247. 4.Potrebno je implementirati metodu uzmi/1 objekta igrac koja ́ce provjeriti je li se zadana stvar nalazi u trenutnoj sobi igrača, ukloniti stvar iz sobe, te igraču pridodati atribut ima čija vrijednost ́ce biti zadana stvar.
  248. Primjeri korištenja:
  249. flora2 ?− igrac [uzmi(pizza)].
  250. Elapsed time 0.0000 seconds
  251. Yes
  252. flora2 ?− igrac [ima−>?stvar].
  253. ?stvar = pizza
  254. 1 solution(s) in 0.0000 seconds
  255. Yes
  256. flora2 ?− kuhinja [sadrzi−>?stvar].
  257. No
  258. Rj.:
  259. ?i[uzmi(?stvar)] :- ?i[pozicija->?poz], ?poz[sadrzi->?stvar], delete{?poz[sadrzi->?stvar]}, insert{?i[ima->?stvar]}, refresh{?i[ima->?stvar]}, ?i[ima->?stvar].
  260.  
  261.  
  262. Zadana je baza znaja o automobilima:
  263. a1:vozilo[boja->plava,godina_proizvodnje->2005].
  264. a2:vozilo[boja->zuta,godina_proizvodnje->1977].
  265. a3:vozilo[boja->zelena,godina_proizvodnje->1980].
  266. a4:vozilo[boja->crvena,godina_proizvodnje->2013].
  267. a5:vozilo[boja->zuta,godina_proizvodnje->2014].
  268. a6:vozilo[boja->plava,godina_proizvodnje->2002].
  269. a7:vozilo[boja->zelena,godina_proizvodnje->1990].
  270. a8:vozilo[boja->crvena,godina_proizvodnje->2003].
  271. ________________________________________
  272. 1. Potrebno je implementirati atribut je_oldtimer klase vozilo koji pokazuje je li neko vozilo starije od 30godina.
  273. Primjer korištenja:
  274. ?x[je_oldtimer].
  275. ?x=a2
  276. ?x=a3.
  277. ?vozilo[je_oldtimer(?sada)->?je_oldtimer]:-?vozilo[godina_proizvodnje->?godina_proizvodnje],
  278. ?je_oldtimer \is ?sada-?godina_proizvodnje.
  279. ?x[je_oldtimer]:-?x:vozilo[je_oldtimer(2015)->?je_oldtimer], ?je_oldtimer>30.
  280. ________________________________________
  281. 2.Potrebno je implementirati atribut opis koji se izračunava na temelju atributa boja i to tako da se makne zadnje slovo vrijednosti atributa i doda nastavak o_vozilo. Pri implementaciji se smiju koristiti moduli.
  282. Primjeri korištenja:
  283. ?x[opis->?o].
  284. ?x=a1
  285. ?o=plavo_vozilo
  286. ?x=a2
  287. ?o=zuto_vozilo
  288. ?x=a3
  289. ?o=zeleno_vozilo
  290. ?x=a4
  291. ?o=crveno_vozilo
  292. ..
  293. ?x[opis->?o]:-?x:vozilo[boja->?o].
  294. ????????
  295. ________________________________________
  296. 3.Potrebno je implementirati predikat vozila_prema_rasponu_godina/3 koji će za prva 2 argumenta primati godine te uz zadnji argument vezati ona vozila koja su proizvedena u zadanom rasponu.
  297. Primjeri korištenja:
  298. vozila_prema_rasponu_godina(2000,2015,?v).
  299. ?v=a1
  300. ?v=a4
  301. ?v=a5
  302. ?v=a6
  303. ?v=a8
  304. vozila_prema_rasponu_godina(?x,?y,?v):-?v[godina_proizvodnje->?v1], ?prva \is ?x, ?druga \is ?y, ?v1>?prva, ?v1<?druga.
  305. ________________________________________
  306. 4.Potrebno implementirati predikat vozila_po_boji/2 koji će agregirati vozila i njihove godine proizvodnje u listu čiji su elementi oblika v(vozilo,godina) i grupirati ih prema boji.
  307. Primjeri korištenja:
  308. vozila_po_boji(plava,?v).
  309. ?v=[v(a1,2005),v(a6,2002)]
  310. vozila_po_boji(?_boja,?v):-?v=collectset{?v[?_boja]|?v:vozilo[boja->?_boja]}.
  311.  
  312.  
  313. Potrebno je implementirati apstraktni tip podataka rjeˇcnik (asocijativni niz) u Flori-2. Obratite pozornost na to
  314. da akcije ažuriranja trebaju biti transakcijske, kako bi se izbjegli neˇzeljeni rezultati (koriˇstenje prefiksa ’%’ kod metoda
  315. objekta i metoda aˇzuriranja s prefiksom ’t ’).
  316. 1. (2 boda) Implementirajte metodu dodaj/2 koja ́ce primati dva parametra (ključ i vrijednost) i dodavati odgo-
  317. varaju ́ce vrijednosti u rijeˇcnik.
  318. Primjeri koriˇstenja:
  319. f l o r a 2 ?− i n s e r t { a : r j e c n i k } .
  320. f l o r a 2 ?− a [ %d o d a j ( 1 , 2 ) ] .
  321. Elapsed time 0.0000 seconds
  322. Yes
  323. f l o r a 2 ?− a [ ? x−>?y ] .
  324. ?x = 1
  325. ?y = 2
  326. f l o r a 2 ?− a [ %d o d a j ( 1 , 3 ) ] .
  327. No
  328. f l o r a 2 ?− a [ ? x−>?y ] .
  329. ?x = 1
  330. ?y = 2
  331. 1 s o l u t i o n ( s ) in 0.0000 seconds
  332. Yes
  333. f l o r a 2 ?− a [ %d o d a j ( 2 , 3 ) ] .
  334. 1Elapsed time 0.0000 seconds
  335. Yes
  336. f l o r a 2 ?− a [ ? x−>?y ] .
  337. ?x = 1
  338. ?y = 2
  339. ?x = 2
  340. ?y = 3
  341. 2 s o l u t i o n ( s ) in 0.0000 seconds
  342. Yes
  343. Rješenje:
  344. ?r:rjecnik[%dodaj(?k,?v)]:-?r[not(?k->?_)],t_insert{?r[?k->?v]}.
  345. ________________________________________
  346. 1. (2 boda) Implementirajte metodu brisi/1 koja ́ce primati kljuˇc rijeˇcnika i obrisati vrijednost pod zadanim kljuˇcem.
  347. Primjeri koriˇstenja:
  348. f l o r a 2 ?− a [ %b r i s i ( 2 ) ] .
  349. Elapsed time 0.0000 seconds
  350. Yes
  351. f l o r a 2 ?− a [ ? x−>?y ] .
  352. ?x = 1
  353. ?y = 2
  354. Rješenje:
  355. ?r:rijecnik[%brisi(?k)]:-t_delete{?r[?k->?_]}.
  356. ________________________________________
  357. 1. (3 boda) Implementirajte metodu azuriraj/2 koja ́ce primati postoje ́ci kljuˇci za njega promijeniti trenutnu
  358. vrijednost na prosljedenu.
  359. Primjeri koriˇstenja:
  360. f l o r a 2 ?− a [ %a z u r i r a j ( 1 , 3 ) ] .
  361. Elapsed time 0.0000 seconds
  362. Yes
  363. f l o r a 2 ?− a [ ? x−>?y ] .
  364. ?x = 1
  365. ?y = 3
  366. 1 s o l u t i o n ( s ) in 0.0040 seconds
  367. Yes
  368. f l o r a 2 ?− a [ %a z u r i r a j ( 2 , 3 ) ] .
  369. No
  370. 2f l o r a 2 ?− a [ ? x−>?y ] .
  371. ?x = 1
  372. ?y = 3
  373. Rješenje:
  374. ?r:rijecnik[%azuriraj(?k,?v)]:-?r[%brisi(?k)],?r[%dodaj(?k,?v)].
  375. ________________________________________
  376. 1. (3 boda) Implementirajte metodu prikazi/1 koja ́ce prikazati sadrˇzaj rjeˇcnika.
  377. Primjeri koriˇstenja:
  378. f l o r a 2 ?− a [ %p r i k a z i ( ? x ) ] .
  379. ?x = [ r (1 ,2)]
  380. 1 s o l u t i o n ( s ) in 0.0040 seconds
  381. Yes
  382. f l o r a 2 ?− a [ %d o d a j ( 3 , 4 ) ] .
  383. Elapsed time 0.0000 seconds
  384. Yes
  385. f l o r a 2 ?− a [ %p r i k a z i ( ? x ) ] .
  386. ?x = [ r (1 ,2) , r (3 ,4)]
  387. Rješenje:
  388. ?r:rijecnik[%prikazi(?x)]:-?x=collectset{?z | ?r[?k->?v], ?z=r(?k->?v)}.
  389.  
  390.  
  391. Neka je zadan modul s.flr koji daje interpretaciju za odredeni svijet (relacija I ) te de
  392. niciju mogucnosnih relacija za agente A i B (relacija k).
  393. I ( p1 ) .
  394. I ( p2 ) .
  395. A[ k􀀀>s1 , k􀀀>s2 ] .
  396. B[ k􀀀>s2 ] .
  397. Logicki naziv modula u koji ce se ucitati modul s.flr predstavljat ce naziv svijeta u kojem on vrijedi. Konkretno, ako se modul ucita u logicki modul s1, to znaci da u svijetu s1 vrijede propozicije p1 i p2, da agent A u svijetu s1 percipira svijetove s1 i s2, a agent B u svijetu s1 percipira svijet s2. Vas zadatak odnosi se na implementaciju
  398. logickog programa za rezoniranje u Kripkeovim strukturama.
  399. 1.Potrebno je implementirati modul agenti.flr te pri pokretanju modula dva puta ucitati modul s.flr jednom u logicki modul s1, a drugi put u logicki modul s2.
  400. Primjer koristenja:
  401. f l o r a 2 ?􀀀 [ a g e n t i ] .
  402. . . . u c i t a v a n j e modula . . .
  403. Yes
  404. f l o r a 2 ?􀀀 A[ k􀀀>? v i d i ]@?u .
  405. ? v i d i = s1
  406. ?u = s1
  407. ? v i d i = s1
  408. ?u = s2
  409. ? v i d i = s2
  410. ?u = s1
  411. ? v i d i = s2
  412. ?u = s2
  413. Rješenje:
  414. ?- [s>>s1].
  415. ?- [s>>s2].
  416. ________________________________________
  417. 1. Potrebno je azurirati bazu znanja tako da se u logicki modul s1 doda cinjenica:
  418. B[ k􀀀>s1 ] .
  419. te obrise cinjenica (iz istog modula s1):
  420. I ( p1 ) .
  421. Rješenje:
  422. ?- insert { B[ k->s1 ]@s1 }.
  423. ?- delete { I(p1)@s1 }.
  424. Oba azuriranja treba provesti pri pokretanju glavnog modula agenti.flr
  425. Primjeri koristenja:
  426. fl o r a 2 ?􀀀 [ a g e n t i ] .
  427. . . . u c i t a v a n j e modula . . .
  428. Yes
  429. f l o r a 2 ?􀀀 B[ k􀀀>? v i d i ]@?u .
  430. ? v i d i = s1
  431. ?u = s1
  432. ? v i d i = s2
  433. ?u = s1
  434. ? v i d i = s2
  435. ?u = s2
  436. f l o r a 2 ?􀀀 I (? v r i j e d i )@?u .
  437. ? v r i j e d i = p1
  438. ?u = s2
  439. ? v r i j e d i = p2
  440. ?u = s1
  441. ? v r i j e d i = p2
  442. ?u = s2
  443. ________________________________________
  444. 1. Potrebno je implementirati predikat percipira( ?agent, ?svijet, ?svijetovi ) koji ce za zadanog agenta
  445. i zadani svijet uz varijablu ?svijetovi vezati listu svih svijetova koje agent percipira putem svoje mogucnosne
  446. relacije k u zadanom svijetu.
  447. Primjeri koristenja:
  448. f l o r a 2 ?􀀀 p e r c i p i r a ( A, s1 , ? s ) .
  449. ? s = [ s1 , s2 ]
  450. f l o r a 2 ?􀀀 p e r c i p i r a ( B, s2 , ? s ) .
  451. ? s = [ s2 ]
  452. Rješenje:
  453. percipira( ?agent, ?svijet, ?svjetovi ) :-
  454. ?svjetovi = setof { ?_vidi | ?agent[ k->?_vidi ]@?svijet }.
  455. ________________________________________
  456. 1. Potrebno je implementirati predikat zna( ?agent, ?propozicija, ?svijet ) koji ce za zadanog agenta,
  457. zadanu propoziciju i zadani svijet provjeriti je li agent zna propoziciju u tom svijetu. (Agent zna propoziciju p
  458. akko ne postoji niti jedan svijet koji agent percipira, a da u njemu p ne vrijedi).
  459. Primjeri koristenja:
  460. fl o r a 2 ?􀀀 zna ( A, p1 , s1 ) .
  461. No
  462. f l o r a 2 ?􀀀 zna ( A, p2 , s2 ) .
  463. El aps ed time 0.0000 s e c onds
  464. Yes
  465. Rješenje:
  466. vrijedi_u_svjetovima( ?_, [] ).
  467. vrijedi_u_svjetovima( ?propozicija, [ ?svijet | ?r ] ) :-
  468. I( ?propozicija )@?svijet,
  469. vrijedi_u_svjetovima( ?propozicija, ?r ).
  470. zna( ?agent, ?propozicija, ?svijet ) :-
  471. percipira( ?agent, ?svijet, ?_svjetovi ),
  472. vrijedi_u_svjetovima( ?propozicija, ?_svjetovi ).
  473.  
  474.  
  475. Neka je zadan usmjereni graf kao na slici:
  476. Predikat veza/2 koji ce upjevati ako postoji veza od cvora zadanog u prvom parametru do cvora
  477. zadanog u drugom parametru.
  478. Primjeri koristenja:
  479. v e za ( a , X ) .
  480. X = b ;
  481. X = c ;
  482. no
  483. j ?􀀀 v e za ( Y, h ) .
  484. Y = f ;
  485. Y = g ;
  486. no
  487. j ?􀀀
  488. Rješenje:
  489. veza(a, b).
  490. veza(a, c).
  491. veza(b, d).
  492. veza(b, c).
  493. veza(c, e).
  494. veza(c, f).
  495. veza(d, g).
  496. veza(e, d).
  497. veza(e, g).
  498. veza(f, h).
  499. veza(g, h).
  500. ________________________________________
  501. 2.Predikat putanja/2 koji ce provjeravati je li postoji usmjerena putanja izmedu cvorova. Primjeri
  502. koristenja:
  503. p u t a n j a ( d , X ) .
  504. X = g;
  505. X = h ;
  506. no
  507. j ?􀀀 p u t a n j a ( c , X ) .
  508. X = e ;
  509. X = f ;
  510. X = d ;
  511. X = g ;
  512. X = g ;
  513. X = h ;
  514. X = h ;
  515. X = h ;
  516. Rješenje:
  517. putanja(A, B) :-
  518. veza(A, B).
  519. putanja(A, B) :-
  520. veza(A, C),
  521. putanja(C, B).
  522. ________________________________________
  523. 1. Predikat dostupno/2 koji ce vracati listu onih cvorova koji su dostupni iz zadanog cvora. Primjeri
  524. koristenja
  525. ?􀀀 dos tupno ( c , L ) .
  526. L = [ d , e , f , g , h ] ;
  527. Rješenje:
  528. dostupno(A, L) :-
  529. setof(_B, putanja(A, _B), L).
  530. ________________________________________
  531. 1. Predikat put od do/3 koji ce za zadane cvorove u listi vratiti putanju izmedu njih, ako ona postoji.
  532. Radi mogucnoti beskonacne petlje, tablirajte predikat direktivom
  533. :􀀀 t a b l e put od do / 3.
  534. Primjeri korištenja:
  535. put od do ( a , d , P ) .
  536. P = [ a , c , e , d ] ;
  537. P = [ a , b , d ] ;
  538. P = [ a , b , c , e , d ] ;
  539. Rješenje:
  540. put_od_do(A, A, [A]).
  541. put_od_do(A, B, [A, B]) :-
  542. veza(A, B).
  543. put_od_do(A, B, [A | Put]) :-
  544. veza(A, C),
  545. put_od_do(C, B, Put).
  546. :- table put_od_do/3.
  547.  
  548.  
  549. Neka je zadan obojeni, usmjereni graf s naznacenim pocetkom (cvor 1) i krajem (cvor 11) kao na slici:
  550. 1.Implementrajte predikate pocetak/1 (pocetni cvor), kraj/1 (zavrsni cvor), boja/2 (boja cvora) i put/2
  551. (veza izmedu dva cvora) koji ce imati sljedece ponasanje:
  552. ?􀀀 poc e t ak ( P ) , k r a j ( K ) .
  553. P = 1
  554. K = 1 1 ;
  555. no
  556. j ?􀀀 bo j a ( 1 , X ) .
  557. X = b i j e l a
  558. y e s
  559. j ?􀀀 bo j a ( 2 , X ) .
  560. X = c rna
  561. y e s
  562. j ?􀀀 put ( 9 , X ) .
  563. X = 1 0 ;
  564. X = 1 1 ;
  565. Rješenje:
  566. boja(2, crna).
  567. boja(6, crna).
  568. boja(9, crna).
  569. boja(_X, bijela) :-
  570. not(boja(_X, crna)).
  571. put(1, 2).
  572. put(1, 3).
  573. put(2, 3).
  574. put(3, 4).
  575. put(3, 7).
  576. put(4, 5).
  577. put(4, 6).
  578. put(5, 8).
  579. put(6, 7).
  580. put(6, 8).
  581. put(7, 9).
  582. put(8,10).
  583. put(9,10).
  584. put(9,11).
  585. put(10, 11).
  586. ________________________________________
  587. 1. Implementirajte predikat bijeli put/2 koji ce za dva cvora provjeriti jesu li oba bijela i povezana
  588. putem. Primjer koristenja:
  589. ?􀀀 b i j e l i p u t ( X, Y ) .
  590. X = 1
  591. Y = 3 ;
  592. X = 3
  593. Y = 4 ;
  594. X = 3
  595. Y = 7 ;
  596. X = 4
  597. Y = 5 ;
  598. X = 5
  599. Y = 8 ;
  600. X = 8
  601. Y = 1 0 ;
  602. X = 10
  603. Y = 1 1 ;
  604. Rješenje:
  605. bijeli_put(X, Y) :-
  606. put(X, Y),
  607. boja(X, bijela),
  608. boja(Y, bijela).
  609. ________________________________________
  610. 1. Implementirajte predikat bijela_putanja/2 koji će provjeriti postoji li
  611. izmedu dva čvora putanja u kojoj su svi među-čvorovi bijeli.
  612. Primjeri korištenja:
  613. ?􀀀 b i j e l a p u t a n j a ( 1 , X ) .
  614. X = 3 ;
  615. X = 4 ;
  616. X = 7 ;
  617. X = 5 ;
  618. X = 8 ;
  619. X = 1 0 ;
  620. X = 1 1 ;
  621. Rješnjje:
  622. bijela_putanja(X, Y) :-
  623. bijeli_put(X, Y).
  624. bijela_putanja(X, Y) :-
  625. bijeli_put(X, Z),
  626. bijela_putanja(Z, Y).
  627. ________________________________________
  628. 4.Implementirajte predikat bijela putranja/3 koja ce se ponasati isto kao i predikat u predhodnom
  629. zadatku uz nadopunu da ce u trecem argumentu prikupiti listu elemenata koji su na tom putu. Primjeri
  630. koristenja:
  631. b i j e l a p u t a n j a ( 1 , 11 , P ) .
  632. P = [ 1 , 3 , 4 , 5 , 8 , 1 0 , 1 1 ]
  633. y e s
  634. j ?􀀀 b i j e l a p u t a n j a ( 7 , 11 , P ) .
  635. no
  636. Rješenje:
  637. bijela_putanja(X, X, [ X ]) :-
  638. boja(X, bijela).
  639. bijela_putanja(X, Y, [ X, Y ]) :-
  640. bijeli_put(X, Y).
  641. bijela_putanja(X, Y, [ X | Putanja ]) :-
  642. bijeli_put(X, Z),
  643. bijela_putanja(Z, Y, Putanja).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement