Created
December 19, 2012 11:35
-
-
Save ivpusic/4336089 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* ----------Zadatak 1---------- */ | |
| osoba[ | |
| ime => string, | |
| prezime => string, | |
| placa => integer, | |
| ukupne_place => integer | |
| ]. | |
| ?osoba[ukupne_place -> ?ukupna_placa]:- | |
| ?ukupna_placa = sum{?_place | ?_:?osoba[placa -> ?_place]}. | |
| zaposlenik :: osoba[ | |
| ]. | |
| kupac :: osoba[ | |
| ]. | |
| menadzer :: zaposlenik[ | |
| ]. | |
| direktor :: menadzer[ | |
| ]. | |
| stefica : kupac[ | |
| ]. | |
| ivek : zaposlenik[ | |
| ime -> ivek, | |
| placa -> 100 | |
| ]. | |
| joza : menadzer[ | |
| ime -> joza, | |
| placa -> 200 | |
| ]. | |
| bara : direktor[ | |
| ime -> bara, | |
| placa -> 300 | |
| ]. | |
| /* ----------Zadatak 2---------- */ | |
| zaposlenik::osoba. | |
| kupac::osoba. | |
| menadzer::zaposlenik. | |
| direktor::menadzer. | |
| stefica:kupac. | |
| ivek:zaposlenik. | |
| joza:menadzer. | |
| bara:direktor. | |
| ?osoba(?list):- | |
| ?list = collectset{ ?_o | ?_o:?osoba }. | |
| /* ----------Zadatak 3---------- */ | |
| member([?X | ?_], ?X). | |
| member([?G | ?R], ?Y):- | |
| member(?R, ?Y). | |
| osoba[ | |
| baka => osoba, | |
| predak => osoba, | |
| ppredak => osoba, | |
| brat => osoba | |
| ]. | |
| /* Baka */ | |
| ?osoba[baka -> ?res]:- | |
| ?osoba:osoba[roditelj -> ?tmp], | |
| ?tmp:osoba[roditelj -> ?res], | |
| ?res:osoba[spol->zensko]. | |
| family(?X, ?Y):- | |
| ?X[roditelj->?Y]. | |
| /* Predak */ | |
| ?_osoba[predak -> ?res]:- | |
| ?_osoba[roditelj -> ?res]. | |
| ?_osoba[predak -> ?res]:- | |
| ?_osoba[roditelj -> ?tmp], | |
| ?tmp[predak->?res]. | |
| /* test.... */ | |
| ?_osoba[ppredak -> ?res]:- | |
| ?_osoba:osoba[roditelj -> ?res]. | |
| /* Brat */ | |
| ?_osoba[brat -> ?brat]:- | |
| ?_osoba[roditelj->?roditelj], | |
| ?brat[roditelj->?roditelj, spol->musko], | |
| ?_osoba != ?brat. | |
| ?_osoba[brat -> ?brat]:- | |
| ?_osoba[roditelj -> ?brat]. | |
| Joza:osoba[ roditelj->{ Stef, Bara }, spol->musko ]. | |
| Ivo: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 ]. | |
| /* ----------Zadatak 4---------- */ | |
| zaposlenik[ | |
| ime => _string, | |
| prezime => _string, | |
| nadredjeni => menadzer, | |
| odjel => string | |
| ]. | |
| menadzer[ | |
| podredjeni => zaposlenik | |
| ]. | |
| ?menadzer[podredjeni(?odjel) -> ?zaposlenici]:- | |
| ?zaposlenici = collectset{?zaposlenik | ?zaposlenik: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 ]. | |
| /* | |
| recenica --> subjekt, predikat. | |
| subjekt --> [ivek]. | |
| subjekt --> [joza]. | |
| predikat --> [uci]. | |
| predikat --> [jede]. | |
| predikat --> [spava]. | |
| recenica( recenica( S, P ) ) --> subjekt( S ), predikat( P ). | |
| subjekt( subjekt( ivek ) ) --> [ivek]. | |
| subjekt( subjekt( joza ) ) --> [joza]. | |
| predikat( predikat( uci ) ) --> [uci]. | |
| predikat( predikat( jede ) ) --> [jede]. | |
| predikat( predikat( spava ) ) --> [spava]. | |
| */ | |
| :- import member/2 from basics. | |
| :- [shell]. | |
| :- auto_table. % uključujemo tzv. tabliranje | |
| /*---------- Zadatak 5 ----------*/ | |
| izraz(izraz(X1, O, X2)) --> prvi(X1), operator(O), drugi(X2). | |
| izraz(izraz(X1, O, X2)) --> prvi(X1), operator(O), drugi(X2). | |
| prvi(prvi(X)) --> [X]. | |
| drugi(drugi(X)) --> [X]. | |
| operator(operator(X)) --> [X]. | |
| /*---------- Zadatak 6 ----------*/ | |
| osoba( ivek ). | |
| osoba( joza ). | |
| osoba( bara ). | |
| osoba(X) --> [X]. | |
| par(par(X1, i, X2)) --> { osoba( X1 ), osoba(X2) }, [X1], veznik, [X2]. | |
| veznik --> [i]. | |
| /*---------- Zadatak 7 ----------*/ | |
| subjekt(subjekt('Ivek')) --> ['Ivek']. | |
| subjekt(subjekt('Stef')) --> ['Stef']. | |
| subjekt(subjekt('Bara')) --> ['Bara']. | |
| predikat(predikat(voli)) --> [voli]. | |
| predikat(predikat(jede)) --> [jede]. | |
| predikat(predikat(gleda)) --> [gleda]. | |
| objekt(objekt(sladoled)) --> [sladoled]. | |
| objekt(objekt(kobasice)) --> [kobasice]. | |
| recenica(recenica(S, P, O)) --> subjekt(S), predikat(P), objekt(O). | |
| /*---------- Zadatak 8 ----------*/ | |
| selekcija(selekcija(I, T)) --> if(I),then(T), ['}']. | |
| selekcija(selekcija(I, T, E)) --> if(I), then(T), else(E). | |
| if(if(X)) --> [if], ['('], uvjeti(X), [')']. | |
| uvjeti(uvjet([G])) --> jedan_uvjet(G). | |
| uvjeti(uvjet([G | R])) --> jedan_uvjet(G), uvjeti(uvjet(R)). | |
| jedan_uvjet(U) --> [U], {zagrade(U)}. | |
| then(then(T)) --> [then], ['{'], thens(T), ['}']. | |
| thens(naredbe([T])) --> jedna_naredba(T). | |
| thens(naredbe([G | R])) --> jedna_naredba(G), thens(naredbe(R)). | |
| jedna_naredba(N) --> [N]. | |
| else(else(E)) --> [else], ['{'], elses(E), ['}']. | |
| elses(naredbe([T])) --> jedan_else(T). | |
| elses(naredbe([G | R])) --> jedan_else(G), elses(naredbe(R)). | |
| jedan_else(N) --> [N]. | |
| zagrade(X):- | |
| Zagrade = ['(', ')'], | |
| not(member(X, Zagrade)). | |
| /*---------- Zadatak 9 ----------*/ | |
| :- [lists]. | |
| make_list([], []). | |
| make_list([G | R], Res):- | |
| make_list(R, Res1), | |
| ( | |
| is_plain_file(G) -> | |
| append(G, Res1, Ress), | |
| Res = Ress | |
| ; | |
| Res = Res1 | |
| ). | |
| listaj(Dir, L):- | |
| cd(Dir), | |
| shell_to_list( 'ls', Tmp, _KodPogreske ), | |
| make_list(Tmp, L). | |
| /*---------- Zadatak 10 ----------*/ | |
| check(Dir, Result):- | |
| list_directory( Dir, Datoteka ), | |
| is_plain_file(Datoteka), | |
| Result = Datoteka. | |
| lista_datoteka(Dir, L):- | |
| setof(Datoteka, check(Dir, Datoteka), L). |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment