User Tools

Site Tools


codeq:prolog:naloge:sins_3

Table of Contents

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

# 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])).
codeq/prolog/naloge/sins_3.txt · Last modified: 2015/07/08 14:52 by timotej