Skip to content

Instantly share code, notes, and snippets.

@ivpusic
Created December 19, 2012 11:35
Show Gist options
  • Save ivpusic/4336089 to your computer and use it in GitHub Desktop.
Save ivpusic/4336089 to your computer and use it in GitHub Desktop.
/* ----------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