User Tools

Site Tools


codeq:prolog:naloge

Naloge za prolog

sister/2

sister(X,Y)X is a sister of Y.

  • Manjka cilj X \== Y, ali pa je postavljen na napačno mesto (preden sta X in Y instancirana).
  • female(Y) namesto female(X), ali pa oba hkrati (relacija ni simetrična).

connected/3

connected(X,Y,N)X and Y are connected with a series of (no more than N) parent/child relations.

  • En korak naredimo s (parent(X,Z) ; parent(Z,X)). Nekaj nepravilnih verzij:
    • parent(X,Z) , parent(Z,X): oboje hkrati ne more veljati.
    • parent(X,Z) ; parent(Y,Z): ne najde povezave med X in Y, če je kateri brez otrok.
  • N is N-1: N ne more biti hkrati npr. 3 in 2.

conc/3

conc(L1,L2,L) ⇔ the list L is obtained by appending the elements of L2 to L1.

  • Študent prvi element H v izhodnem seznamu doda v rekurzivnem cilju, namesto v glavi pravila:
    • conc([H|T],L2,L) :- conc(T,L2,[H|L]).

del/3

del(X,L1,L2) ⇔ the list L2 is obtained from L1 by deleting element X.

  • Robni primer je brisanje iz začetka seznama – del(X,[X|T],T) – in ne iz seznama z enim elementom – del(X,[X],[]).
  • Študent pozabi na prvi element, ko briše iz repa seznama: del(X,[H|T],NewT):- namesto del(X,[H|T],[H|NewT]):-.

insert/3

insert(X,L1,L2) ⇔ the list L2 is obtained from L1 by inserting the element X at arbitrary position.

  • Robni primer je vstavljanje na začetek seznama – insert(X,L,[X|L]) – in ne v prazen seznam – insert(X,[],[X]).

min/2

min(L,Min)Min is the smallest element in the list L.

  • Pravilno: (MinT < H, Min = MinT ; MinT >= H, Min = H). Napake:
    • Obe neenakosti sta strogi: program ne dela na [1,1].
    • Manjka pogoj v eni veji: program poleg pravilne rešitve vrača še nepravilne.

count/3

count(X,L,N)N is the number of times the element X appears in the list L.

  • Manjka rekurzivno pravilo za primer, ko X ni enak prvemu elementu seznama L = [H|T].

sins/3

quick_sort/2

quick_sort(L,SL) ⇔ the list SL contains the elements of L sorted in non-decreasing order. Use the predicate pivoting/4 to implement quicksort.

  • Če pivoting kličemo na celem seznamu L=[H|T], se prolog zacikla, ko pride do klica quick_sort([H],SL), saj velja pivoting(H,[H],[H],[]). Rešitev: pivoting kličemo na T, H pa dodamo na koncu med sortirana podseznama.
codeq/prolog/naloge.txt · Last modified: 2016/04/06 13:30 by timotej