Created
December 19, 2012 11:35
-
-
Save ivpusic/4336089 to your computer and use it in GitHub Desktop.
This file contains 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