UL/FRI/UNI-RI/MOS/Izpiti/2006-12-01-prolog

Iz E-študij, proste zakladnice študentskega znanja

< UL | FRI | UNI-RI | MOS | Izpiti
Skoči na: navigacija, iskanje

Izpit z dne Napaka: neveljaven čas
UL/FRI/UNI-RI/MOS


Čas pisanja: ni podatka glej podobne izpite minut.
Literatura: ni podatka glej podobne izpite.

(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.

 
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja