UL/FRI/UNI-RI/MOS/Izpiti/2006-12-01-prolog
Iz E-študij, proste zakladnice študentskega znanja
|
Izpit z dne Napaka: neveljaven čas
Čas pisanja: ni podatka glej podobne izpite minut.
|
(1) Spodnja dejstva o robotovem svetu so v prologovi bazi. Kaj odgovori prolog na naslednja vprasanja? Podajte vse odgovore v pravilnem vrstnem redu.
see(a,2,3).
see(b,3,2).
see(e,3,3).
see(f,1,1).
on(b,c).
on(c,d).
on(a,table).
on(d,table).
on(e,table).
on(f,table).
a) ?- on(B,table).
=> B = a B = d B = e B = f no
b) ?- see(B,X,Y),on(B,_),(X>1;Y>1).
=> B = a, X = 2, Y = 3
B = a, X = 2, Y = 3
B = b, X = 3, Y = 2
B = b, X = 3, Y = 2
B = e, X = 3, Y = 3
B = e, X = 3, Y = 3
c) ?- see(B,_,_),on(B,table).
=> B=a
B=e
B=f
d) ?- setof(B,on(B,table),L), member(b,L).
=> no
e) ?- see(B,X,Y), \+ (X=:=Y).
=> B=a, X=2,Y=3 B=b, X=3,Y=2
(2) Namen spodnje funkcije je izracunati "z" koordinato kocke (visino na kateri se nahaja). Popravite (ne napisite nove!) funkcijo, da bo delovala pravilno.
height(B,Z):-height(B1,Z1);on(B,B1),Z is Z1+1. height(B,0):-on(B,table).
Resitev
height(B,0):-on(B,table). height(B,Z):-on(B,B1),height(B1,Z1),Z is Z1+1.
(3) Recimo da imate se podatke o barvah kock (na primer blue(a)). Kako bi prologu zastavili naslednja
vprasanja?
a) Nastej vse modre kocke, ki so sosednje (po visini) kocki a. %iscemo vse kocke ki so visje ali pa nizje % od kocke a
?- findall(X,((on(X,a);on(a,X)),blue(X)),L).
b) Koliko je vseh kock, ki so nad kocko d?
poisci_vse_kocke_nad_kocko_d(Seznam):-height(d,N),findall(X,(height(X,M),M>N),Seznam). % ce iscemo samo kocke ki so po visini
% visje od d-ja
?- poisci_vse_kocke_nad_kocko_d(Seznam).
c) Vrni seznam brez duplikatov vseh X koordinat na katerih so rdece kocke!
element(A,[A|R]). element(A,[_|R]):-element(A,R). mnozica([],[]). mnozica([G|R],Mno):-element(G,R),!,mnozica(R,Mno). mnozica([G|R,[G|R1]):-mnozica(R,R1). x_koordinate(Seznam):- findall(X,(obstaja_kocka(Kocka,X,Y),red(Kocka)),Seznam1),mnozica(Seznam1,Seznam). => ?- x_koordinate(Seznam).
d) Ali obstaja kaksna modra kocka na koordinatah X=2,Y=3.
obstaja_kocka(Kocka,X,Y):-see(Kocka,X,Y). obstaja_kocka(Kocka,X,Y):-on(G1,Kocka),obstaja_kocka(G1,X,Y). ?-obstaja_kocka(Kocka,2,3),blue(Kocka).
e) Katera kocka ima najmanjso X koordinato?
(4) Recimo, da je robotov svet iz prve naloge velik 3x3 polja (podatki o kockah pa so poljubni) - torej
ne nujno taki kot v nalogi 1). Napisite proceduro, ki vse kocke, ki ne lezijo na mizi, postavi na mizo!
Procedura naj na uporabnikovo zahtevo vrne vse mozne resitve. Dejstva, ki so v prologovi bazi spreminjate
z ukazoma assert (dodaj dejstvo) in retract(zbrisi dejstvo). Na primer:
retract(see (a,2,3)), assert(see(a,1,2)).
"prestavi" kocko a iz (2,3) na (1,2). Seveda bi morali na enak nacin poskrbeti se za relacijo on. Namig: member(X,[1,2,3]) nedeterministicno izbere stevilo med 1 in 3.