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].
sins(X, [], [X]). sins(X, [Y|T], [X,Y|T]) :- X =< Y. sins(X, [Y|T], [Y|L]) :- X > Y, sins(X, T, L).
# | 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. |
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])).