====== Opis ====== Predikat ''sins(X, SortedList, NewSortedList)'' naredi seznam ''NewSortedList'' tako, da vstavi element ''X'' na ustrezno mesto v sortiran (v nepadajočem vrstnem redu) seznam ''SortedList''. Ta lahko vsebuje podvojene elemente; tudi element ''x'' se lahko že pojavi v njem. Primera: ?- sins(4, [1,3,5,7], New). New = [1,3,4,5,7]. ?- sins(-2, [-1,0], New). New = [-2,-1,0]. ====== Rešitev ====== sins(X, [], [X]). sins(X, [Y|T], [X,Y|T]) :- X =< Y. sins(X, [Y|T], [Y|L]) :- X > Y, sins(X, T, L). ====== Namigi ====== {{:codeq:prolog:naloge:sins-hints-1.jpg|}} {{:codeq:prolog:naloge:sins-hints-2.jpg|}} ^ # ^ Namig ^ | 1 | Kaj se zgodi, če je ''SortedList'' prazen? | | 2 | Kaj se zgodi, če vstavljamo nov največji element? | | 3 | Kaj se zgodi, če vstavljamo nov najmanjši element? | | 4 | Manjka veja rekurzije, ki preskakuje elemente, manjše od ''X''. | | 5 | V obeh vejah rekurzije je potrebno primerjati ''X'' z glavo seznama, sicer dobimo več (nepravilnih) rešitev. | | 6 | Pri preskakovanju elementov, manjših od ''X'', jih ne doda v nov seznam. | ====== Testni primeri ====== ex(sins(8, [], [8])). ex(sins(1, [0,0,0], [0,0,0,1])). ex(sins(5, [3,4,6,7], [3,4,5,6,7])). ex(sins(4, [5], [4,5])).