Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Zadana je baza znanja:
- a : cvor [b r i d −>{b, c, d } ].
- b : cvor [b r i d −>{c, e } ].
- c : cvor [b r i d −>{e, d } ].
- d : cvor [b r i d −>f].
- e : cvor [b r i d −>f].
- f : cvor .
- ________________________________________
- Implementirajte metodu put/0 klase cvor koja vraca sve cvorove kojima je trenutni cvor povezan usmjerenom putanjom.
- Primjeri korištenja:
- flora2 ?− c [ put −>?x ] .
- ?x = d
- ?x = e
- ?x = f
- 3 solution (s) in 0.0000 seconds
- Yes
- flora2 ?− a [ put −>?x ] .
- ?x = b
- ?x = c
- ?x = d
- ?x = e
- ?x = f
- Rj.:
- ?c:cvor[put->?x]:-?c[brid->?x].
- ?c:cvor[put->?x]:-?c[brid->?y],?y[put->?x]
- ________________________________________
- Implementirajte metodu duljina/1 klase cvor koja za primljeni cvor vraca sve udaljenosti od trenutnog cvora.
- Primjeri koristenja:
- flora2 ?− a [ duljina ( c )−>?x ] .
- ?x = 1
- ?x = 2
- 2 solution ( s ) in 0.0040 seconds
- Yes
- flora2 ?− a [duljina ( e )−>?x ] .
- ?x = 2
- Rj.:
- ?c:cvor[duljina(?x)->1]:-?c[brid->?x].
- ?c:cvor[duljina(?x)->?d]:-?c[brid->?y],?y[duljina(?x)->?d1],?d is ?d1+1.
- ________________________________________
- 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.
- Primjeri koristenja:
- flora2 ?− ?C : obojeni_cvor [boja−>?boja ,brid−>? brid] .
- ?C = x
- ? boja = zuta
- ? brid = a
- ?C = y
- ? boja = plava
- ? brid = b
- ?C = z
- ? boja = zelena
- ? brid = c
- Rj.:
- obojeni_cvor::cvor.
- x:obojeni_cvor[boja->zuta, brid->a].
- y:obojeni_cvor[boja->zelena, brid->b].
- z:obojeni_cvor[boja->zelena, brid->c].
- ________________________________________
- Izmjenite metodu put iz prvog zadatka tako da ona vrijedi samo za neobojene cvorove. Novu petodu nazovite put2/0.
- Primjeri koristenja:
- flora2 ?− x [ put −>?y ] .
- ?y = a
- ?y = b
- ?y = c
- ?y = d
- ?y = e
- ?y = f
- 6 solution (s) in 0.0000 seconds
- Yes
- flora2 ?− x [ put2 −>?y ] .
- No
- Rj.:
- ?c:cvor[put2->?x]:-?c[brid->?x],not(?c:obojeni_cvor),not(?x:obojeni_cvor).
- ?c:cvor[put2->?x]:-?c[brid->?y],?y[put2->?x],not(?c:obojeni_cvor),not(?x:obojeni_cvor),not(?y:obojeni_cvor).
- Neka je zadana baza znanja:
- zaposlenik::osoba.
- kupac::osoba.
- menadzer::zaposlenik.
- direktor::menadzer.
- stefica:kupac.
- ivek:zaposlenik.
- joza:menadzer.
- bara:direktor.
- ivek[ placa->100 ].
- joza[ placa->200 ].
- bara[ placa->300 ].
- ________________________________________
- Implementirajte metodu ukupne_place koja će za zadanu klasu vratiti zbroj svih plaća objekata u toj klasi.
- Primjeri korištenja:
- flora2 ?- osoba[ ukupne_place->?p ].
- ?p = 600
- 1 solution(s) in 0.0100 seconds
- Yes
- flora2 ?- zaposlenik[ ukupne_place->?p ].
- ?p = 600
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- menadzer[ ukupne_place->?p ].
- ?p = 500
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- direktor[ ukupne_place->?p ].
- ?p = 300
- 1 solution(s) in 0.0000 seconds
- Yes
- Rj.:
- osoba[ukupne_place => integer].
- zaposlenik::osoba[placa => integer].
- ?osoba[ukupne_place -> ?ukupna_placa] :-
- ?ukupna_placa = sum{? _ g | ? _ :?osoba[placa->?_g]}.
- ________________________________________
- Implementirajte meta-predikat (naziv/funktor predikata je varijabilan) koji će omogućiti vraćanje liste objekata koji su u
- klasi zadanom nazivom predikata.
- Primjeri korištenja:
- flora2 ?- osoba( ?x ).
- ?x = [bara, ivek, joza, stefica]
- 1 solution(s) in 0.0100 seconds
- Yes
- flora2 ?- kupac( ?x ).
- ?x = [stefica]
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- zaposlenik( ?x ).
- ?x = [bara, ivek, joza]
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- menadzer( ?x ).
- ?x = [bara, joza]
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- direktor( ?x ).
- ?x = [bara]
- 1 solution(s) in 0.0000 seconds
- Yes
- Rj.
- ?predikat(?x) :- ?x = collectset{?_g| ?_g:?predikat}.
- Neka je zadana sljedeća baza znanja u F-logici:
- Joza:osoba[ roditelj->{ Stef, Bara }, spol->musko ].
- Stef:osoba[ roditelj->{ Stefica, Ivek }, spol->musko ].
- Bara:osoba[ roditelj->{ Slavek, Marica }, spol->zensko ].
- Ivek:osoba[ spol->musko ].
- Stefica:osoba[ spol->zensko ].
- Slavek:osoba[ spol->musko ].
- Marica:osoba[ spol->zensko ].
- ________________________________________
- Implementirajte metode baka i predak za klasu osoba. Primjeri korištenja:
- flora2 ?- ?x[ baka->?y ].
- ?x = Joza
- ?y = Marica
- ?x = Joza
- ?y = Stefica
- 2 solution(s) in 0.0000 seconds
- Yes
- flora2 ?- Joza[ predak->?y ].
- ?y = Bara
- ?y = Ivek
- ?y = Marica
- ?y = Slavek
- ?y = Stef
- ?y = Stefica
- 6 solution(s) in 0.0000 seconds
- Yes
- flora2 ?-
- Rj.:
- osoba [ roditelj = > osoba, spol = > string, baka = > osoba, predak = > osoba ].
- ?osoba[baka -> ?baka] :- ?osoba[roditelj->?roditelj], ?roditelj[roditelj->?baka], ?baka[spol->zensko].
- ?osoba[predak -> ?predak] :- ?osoba[roditelj->?predak].
- ?osoba[predak -> ?predak] :- ?osoba[predak -> ?x], ?x[roditelj->?predak].
- Joza:osoba[ roditelj->{ Stef, Bara }, spol->musko ].
- Stef:osoba[ roditelj->{ Stefica, Ivek }, spol->musko ].
- Bara:osoba[ roditelj->{ Slavek, Marica }, spol->zensko ].
- Ivek:osoba[ spol->musko ].
- Stefica:osoba[ spol->zensko ].
- Slavek:osoba[ spol->musko ].
- Marica:osoba[ spol->zensko ].
- Implementirajte sljedeći UML dijagram u F-logici:
- http://arka.foi.hr/~mschatten/lp/uml_manageri.png
- Metoda podređeni prima naziv odjela i vraća listu podređenih datog menadžera.
- Primjerice neka je zadana sljedeća baza znanja:
- ivek:zaposlenik[ ime->Ivan, prezime->Presvetli, nadredjeni->bara, odjel->Marketing ].
- joza:zaposlenik[ ime->Josip, prezime->Prikratki, nadredjeni->bara, odjel->Marketing ].
- bara:menadzer[ ime->Barica, prezime->Jambrek ].
- Tada će se program ponašati na sljedeći način:
- flora2 ?- bara[ podredjeni( Marketing ) -> ?x ].
- ?x = [ivek, joza]
- 1 solution(s) in 0.0000 seconds
- Yes
- Rj.:
- zaposlenik [ ime => _string, prezime => _string, nadredjeni => menadzer, odjel => _string ].
- menadzer::zaposlenik[podredjeni(_string)=>zaposlenik].
- ?menadzer[podredjeni(?odjel)->?podredjeni] :-
- ?podredjeni = collectset{?_g| ?_g:zaposlenik[nadredjeni->?menadzer, odjel-> ?odjel]}.
- ivek:zaposlenik[ ime->Ivan, prezime->Presvetli, nadredjeni->bara, odjel->Marketing ].
- joza:zaposlenik[ ime->Josip, prezime->Prikratki, nadredjeni->bara, odjel->Marketing ].
- bara:menadzer[ ime->Barica, prezime->Jambrek ].
- Neka je zadan modul kuca.flr koji definira objekte koji predstavljaju sobe u kući te trenutnu poziciju igrača.
- hodnik[vrata−>’dnevni boravak’, vrata−>’spavaca soba’].
- ’spavaca soba’[vrata−>kupaona].
- ’dnevni boravak’ [vrata−>kuhinja].
- kuhinja [sadrzi−>pizza].
- igrac[pozicija−>hodnik].
- ________________________________________
- 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.
- Primjer korištenja:
- flora2 ?− kuhinja[vrata−>?soba].
- ? soba = dnevni boravak
- 1 solution (s) in 0.0000 seconds
- Rj.:
- ?x[vrata->?soba] :- ?soba[vrata->?x].
- ________________________________________
- 2.Potrebno je implementirati predikat put/2 koji ́ce provjeravati je li izmedu dvije sobe postoji put.
- Primjer korištenja:
- flora2 ?− put(hodnik, ?soba).
- ? soba = dnevni boravak
- ? soba = hodnik
- ? soba = kuhinja
- ? soba = kupaona
- ? soba = spavaca soba
- 5 solution(s) in 0.0000 seconds
- Rj.:
- put(?x,?soba):-?x[vrata->?soba1],?soba1[vrata->?soba].
- put(?x,?soba):-?x[vrata->?soba],?soba[vrata->?soba1],?soba1[vrata->?soba].
- ________________________________________
- 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.
- Primjeri korištenja:
- flora2 ?− igrac [idi (kuhinja)].
- Elapsed time 0.0000 seconds
- Yes
- flora2 ?− igrac [pozicija−>?soba].
- ? soba = kuhinja
- 1 solution(s) in 0.0000 seconds
- Rj.:
- ?i[idi(?soba)]:-?i[pozicija->?poz], ?poz[vrata->?soba], ?soba[vrata->?poz], delete{?i[pozicija->?poz]}, insert{?i[pozicija->?soba]},
- refresh{?i[pozicija->?soba]}, ?i[pozicija->?soba].
- ________________________________________
- 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.
- Primjeri korištenja:
- flora2 ?− igrac [uzmi(pizza)].
- Elapsed time 0.0000 seconds
- Yes
- flora2 ?− igrac [ima−>?stvar].
- ?stvar = pizza
- 1 solution(s) in 0.0000 seconds
- Yes
- flora2 ?− kuhinja [sadrzi−>?stvar].
- No
- Rj.:
- ?i[uzmi(?stvar)] :- ?i[pozicija->?poz], ?poz[sadrzi->?stvar], delete{?poz[sadrzi->?stvar]}, insert{?i[ima->?stvar]}, refresh{?i[ima->?stvar]}, ?i[ima->?stvar].
- Zadana je baza znaja o automobilima:
- a1:vozilo[boja->plava,godina_proizvodnje->2005].
- a2:vozilo[boja->zuta,godina_proizvodnje->1977].
- a3:vozilo[boja->zelena,godina_proizvodnje->1980].
- a4:vozilo[boja->crvena,godina_proizvodnje->2013].
- a5:vozilo[boja->zuta,godina_proizvodnje->2014].
- a6:vozilo[boja->plava,godina_proizvodnje->2002].
- a7:vozilo[boja->zelena,godina_proizvodnje->1990].
- a8:vozilo[boja->crvena,godina_proizvodnje->2003].
- ________________________________________
- 1. Potrebno je implementirati atribut je_oldtimer klase vozilo koji pokazuje je li neko vozilo starije od 30godina.
- Primjer korištenja:
- ?x[je_oldtimer].
- ?x=a2
- ?x=a3.
- ?vozilo[je_oldtimer(?sada)->?je_oldtimer]:-?vozilo[godina_proizvodnje->?godina_proizvodnje],
- ?je_oldtimer \is ?sada-?godina_proizvodnje.
- ?x[je_oldtimer]:-?x:vozilo[je_oldtimer(2015)->?je_oldtimer], ?je_oldtimer>30.
- ________________________________________
- 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.
- Primjeri korištenja:
- ?x[opis->?o].
- ?x=a1
- ?o=plavo_vozilo
- ?x=a2
- ?o=zuto_vozilo
- ?x=a3
- ?o=zeleno_vozilo
- ?x=a4
- ?o=crveno_vozilo
- ..
- ?x[opis->?o]:-?x:vozilo[boja->?o].
- ????????
- ________________________________________
- 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.
- Primjeri korištenja:
- vozila_prema_rasponu_godina(2000,2015,?v).
- ?v=a1
- ?v=a4
- ?v=a5
- ?v=a6
- ?v=a8
- vozila_prema_rasponu_godina(?x,?y,?v):-?v[godina_proizvodnje->?v1], ?prva \is ?x, ?druga \is ?y, ?v1>?prva, ?v1<?druga.
- ________________________________________
- 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.
- Primjeri korištenja:
- vozila_po_boji(plava,?v).
- ?v=[v(a1,2005),v(a6,2002)]
- vozila_po_boji(?_boja,?v):-?v=collectset{?v[?_boja]|?v:vozilo[boja->?_boja]}.
- Potrebno je implementirati apstraktni tip podataka rjeˇcnik (asocijativni niz) u Flori-2. Obratite pozornost na to
- da akcije ažuriranja trebaju biti transakcijske, kako bi se izbjegli neˇzeljeni rezultati (koriˇstenje prefiksa ’%’ kod metoda
- objekta i metoda aˇzuriranja s prefiksom ’t ’).
- 1. (2 boda) Implementirajte metodu dodaj/2 koja ́ce primati dva parametra (ključ i vrijednost) i dodavati odgo-
- varaju ́ce vrijednosti u rijeˇcnik.
- Primjeri koriˇstenja:
- f l o r a 2 ?− i n s e r t { a : r j e c n i k } .
- f l o r a 2 ?− a [ %d o d a j ( 1 , 2 ) ] .
- Elapsed time 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 2
- f l o r a 2 ?− a [ %d o d a j ( 1 , 3 ) ] .
- No
- f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 2
- 1 s o l u t i o n ( s ) in 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ %d o d a j ( 2 , 3 ) ] .
- 1Elapsed time 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 2
- ?x = 2
- ?y = 3
- 2 s o l u t i o n ( s ) in 0.0000 seconds
- Yes
- Rješenje:
- ?r:rjecnik[%dodaj(?k,?v)]:-?r[not(?k->?_)],t_insert{?r[?k->?v]}.
- ________________________________________
- 1. (2 boda) Implementirajte metodu brisi/1 koja ́ce primati kljuˇc rijeˇcnika i obrisati vrijednost pod zadanim kljuˇcem.
- Primjeri koriˇstenja:
- f l o r a 2 ?− a [ %b r i s i ( 2 ) ] .
- Elapsed time 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 2
- Rješenje:
- ?r:rijecnik[%brisi(?k)]:-t_delete{?r[?k->?_]}.
- ________________________________________
- 1. (3 boda) Implementirajte metodu azuriraj/2 koja ́ce primati postoje ́ci kljuˇci za njega promijeniti trenutnu
- vrijednost na prosljedenu.
- Primjeri koriˇstenja:
- f l o r a 2 ?− a [ %a z u r i r a j ( 1 , 3 ) ] .
- Elapsed time 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 3
- 1 s o l u t i o n ( s ) in 0.0040 seconds
- Yes
- f l o r a 2 ?− a [ %a z u r i r a j ( 2 , 3 ) ] .
- No
- 2f l o r a 2 ?− a [ ? x−>?y ] .
- ?x = 1
- ?y = 3
- Rješenje:
- ?r:rijecnik[%azuriraj(?k,?v)]:-?r[%brisi(?k)],?r[%dodaj(?k,?v)].
- ________________________________________
- 1. (3 boda) Implementirajte metodu prikazi/1 koja ́ce prikazati sadrˇzaj rjeˇcnika.
- Primjeri koriˇstenja:
- f l o r a 2 ?− a [ %p r i k a z i ( ? x ) ] .
- ?x = [ r (1 ,2)]
- 1 s o l u t i o n ( s ) in 0.0040 seconds
- Yes
- f l o r a 2 ?− a [ %d o d a j ( 3 , 4 ) ] .
- Elapsed time 0.0000 seconds
- Yes
- f l o r a 2 ?− a [ %p r i k a z i ( ? x ) ] .
- ?x = [ r (1 ,2) , r (3 ,4)]
- Rješenje:
- ?r:rijecnik[%prikazi(?x)]:-?x=collectset{?z | ?r[?k->?v], ?z=r(?k->?v)}.
- Neka je zadan modul s.flr koji daje interpretaciju za odredeni svijet (relacija I ) te de
- niciju mogucnosnih relacija za agente A i B (relacija k).
- I ( p1 ) .
- I ( p2 ) .
- A[ k>s1 , k>s2 ] .
- B[ k>s2 ] .
- 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
- logickog programa za rezoniranje u Kripkeovim strukturama.
- 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.
- Primjer koristenja:
- f l o r a 2 ? [ a g e n t i ] .
- . . . u c i t a v a n j e modula . . .
- Yes
- f l o r a 2 ? A[ k>? v i d i ]@?u .
- ? v i d i = s1
- ?u = s1
- ? v i d i = s1
- ?u = s2
- ? v i d i = s2
- ?u = s1
- ? v i d i = s2
- ?u = s2
- Rješenje:
- ?- [s>>s1].
- ?- [s>>s2].
- ________________________________________
- 1. Potrebno je azurirati bazu znanja tako da se u logicki modul s1 doda cinjenica:
- B[ k>s1 ] .
- te obrise cinjenica (iz istog modula s1):
- I ( p1 ) .
- Rješenje:
- ?- insert { B[ k->s1 ]@s1 }.
- ?- delete { I(p1)@s1 }.
- Oba azuriranja treba provesti pri pokretanju glavnog modula agenti.flr
- Primjeri koristenja:
- fl o r a 2 ? [ a g e n t i ] .
- . . . u c i t a v a n j e modula . . .
- Yes
- f l o r a 2 ? B[ k>? v i d i ]@?u .
- ? v i d i = s1
- ?u = s1
- ? v i d i = s2
- ?u = s1
- ? v i d i = s2
- ?u = s2
- f l o r a 2 ? I (? v r i j e d i )@?u .
- ? v r i j e d i = p1
- ?u = s2
- ? v r i j e d i = p2
- ?u = s1
- ? v r i j e d i = p2
- ?u = s2
- ________________________________________
- 1. Potrebno je implementirati predikat percipira( ?agent, ?svijet, ?svijetovi ) koji ce za zadanog agenta
- i zadani svijet uz varijablu ?svijetovi vezati listu svih svijetova koje agent percipira putem svoje mogucnosne
- relacije k u zadanom svijetu.
- Primjeri koristenja:
- f l o r a 2 ? p e r c i p i r a ( A, s1 , ? s ) .
- ? s = [ s1 , s2 ]
- f l o r a 2 ? p e r c i p i r a ( B, s2 , ? s ) .
- ? s = [ s2 ]
- Rješenje:
- percipira( ?agent, ?svijet, ?svjetovi ) :-
- ?svjetovi = setof { ?_vidi | ?agent[ k->?_vidi ]@?svijet }.
- ________________________________________
- 1. Potrebno je implementirati predikat zna( ?agent, ?propozicija, ?svijet ) koji ce za zadanog agenta,
- zadanu propoziciju i zadani svijet provjeriti je li agent zna propoziciju u tom svijetu. (Agent zna propoziciju p
- akko ne postoji niti jedan svijet koji agent percipira, a da u njemu p ne vrijedi).
- Primjeri koristenja:
- fl o r a 2 ? zna ( A, p1 , s1 ) .
- No
- f l o r a 2 ? zna ( A, p2 , s2 ) .
- El aps ed time 0.0000 s e c onds
- Yes
- Rješenje:
- vrijedi_u_svjetovima( ?_, [] ).
- vrijedi_u_svjetovima( ?propozicija, [ ?svijet | ?r ] ) :-
- I( ?propozicija )@?svijet,
- vrijedi_u_svjetovima( ?propozicija, ?r ).
- zna( ?agent, ?propozicija, ?svijet ) :-
- percipira( ?agent, ?svijet, ?_svjetovi ),
- vrijedi_u_svjetovima( ?propozicija, ?_svjetovi ).
- Neka je zadan usmjereni graf kao na slici:
- Predikat veza/2 koji ce upjevati ako postoji veza od cvora zadanog u prvom parametru do cvora
- zadanog u drugom parametru.
- Primjeri koristenja:
- v e za ( a , X ) .
- X = b ;
- X = c ;
- no
- j ? v e za ( Y, h ) .
- Y = f ;
- Y = g ;
- no
- j ?
- Rješenje:
- veza(a, b).
- veza(a, c).
- veza(b, d).
- veza(b, c).
- veza(c, e).
- veza(c, f).
- veza(d, g).
- veza(e, d).
- veza(e, g).
- veza(f, h).
- veza(g, h).
- ________________________________________
- 2.Predikat putanja/2 koji ce provjeravati je li postoji usmjerena putanja izmedu cvorova. Primjeri
- koristenja:
- p u t a n j a ( d , X ) .
- X = g;
- X = h ;
- no
- j ? p u t a n j a ( c , X ) .
- X = e ;
- X = f ;
- X = d ;
- X = g ;
- X = g ;
- X = h ;
- X = h ;
- X = h ;
- Rješenje:
- putanja(A, B) :-
- veza(A, B).
- putanja(A, B) :-
- veza(A, C),
- putanja(C, B).
- ________________________________________
- 1. Predikat dostupno/2 koji ce vracati listu onih cvorova koji su dostupni iz zadanog cvora. Primjeri
- koristenja
- ? dos tupno ( c , L ) .
- L = [ d , e , f , g , h ] ;
- Rješenje:
- dostupno(A, L) :-
- setof(_B, putanja(A, _B), L).
- ________________________________________
- 1. Predikat put od do/3 koji ce za zadane cvorove u listi vratiti putanju izmedu njih, ako ona postoji.
- Radi mogucnoti beskonacne petlje, tablirajte predikat direktivom
- : t a b l e put od do / 3.
- Primjeri korištenja:
- put od do ( a , d , P ) .
- P = [ a , c , e , d ] ;
- P = [ a , b , d ] ;
- P = [ a , b , c , e , d ] ;
- Rješenje:
- put_od_do(A, A, [A]).
- put_od_do(A, B, [A, B]) :-
- veza(A, B).
- put_od_do(A, B, [A | Put]) :-
- veza(A, C),
- put_od_do(C, B, Put).
- :- table put_od_do/3.
- Neka je zadan obojeni, usmjereni graf s naznacenim pocetkom (cvor 1) i krajem (cvor 11) kao na slici:
- 1.Implementrajte predikate pocetak/1 (pocetni cvor), kraj/1 (zavrsni cvor), boja/2 (boja cvora) i put/2
- (veza izmedu dva cvora) koji ce imati sljedece ponasanje:
- ? poc e t ak ( P ) , k r a j ( K ) .
- P = 1
- K = 1 1 ;
- no
- j ? bo j a ( 1 , X ) .
- X = b i j e l a
- y e s
- j ? bo j a ( 2 , X ) .
- X = c rna
- y e s
- j ? put ( 9 , X ) .
- X = 1 0 ;
- X = 1 1 ;
- Rješenje:
- boja(2, crna).
- boja(6, crna).
- boja(9, crna).
- boja(_X, bijela) :-
- not(boja(_X, crna)).
- put(1, 2).
- put(1, 3).
- put(2, 3).
- put(3, 4).
- put(3, 7).
- put(4, 5).
- put(4, 6).
- put(5, 8).
- put(6, 7).
- put(6, 8).
- put(7, 9).
- put(8,10).
- put(9,10).
- put(9,11).
- put(10, 11).
- ________________________________________
- 1. Implementirajte predikat bijeli put/2 koji ce za dva cvora provjeriti jesu li oba bijela i povezana
- putem. Primjer koristenja:
- ? b i j e l i p u t ( X, Y ) .
- X = 1
- Y = 3 ;
- X = 3
- Y = 4 ;
- X = 3
- Y = 7 ;
- X = 4
- Y = 5 ;
- X = 5
- Y = 8 ;
- X = 8
- Y = 1 0 ;
- X = 10
- Y = 1 1 ;
- Rješenje:
- bijeli_put(X, Y) :-
- put(X, Y),
- boja(X, bijela),
- boja(Y, bijela).
- ________________________________________
- 1. Implementirajte predikat bijela_putanja/2 koji će provjeriti postoji li
- izmedu dva čvora putanja u kojoj su svi među-čvorovi bijeli.
- Primjeri korištenja:
- ? b i j e l a p u t a n j a ( 1 , X ) .
- X = 3 ;
- X = 4 ;
- X = 7 ;
- X = 5 ;
- X = 8 ;
- X = 1 0 ;
- X = 1 1 ;
- Rješnjje:
- bijela_putanja(X, Y) :-
- bijeli_put(X, Y).
- bijela_putanja(X, Y) :-
- bijeli_put(X, Z),
- bijela_putanja(Z, Y).
- ________________________________________
- 4.Implementirajte predikat bijela putranja/3 koja ce se ponasati isto kao i predikat u predhodnom
- zadatku uz nadopunu da ce u trecem argumentu prikupiti listu elemenata koji su na tom putu. Primjeri
- koristenja:
- b i j e l a p u t a n j a ( 1 , 11 , P ) .
- P = [ 1 , 3 , 4 , 5 , 8 , 1 0 , 1 1 ]
- y e s
- j ? b i j e l a p u t a n j a ( 7 , 11 , P ) .
- no
- Rješenje:
- bijela_putanja(X, X, [ X ]) :-
- boja(X, bijela).
- bijela_putanja(X, Y, [ X, Y ]) :-
- bijeli_put(X, Y).
- bijela_putanja(X, Y, [ X | Putanja ]) :-
- bijeli_put(X, Z),
- bijela_putanja(Z, Y, Putanja).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement