Zadanie 1

Zdefiniuj predykat polflag(L,F) odnoszący sukces, jeśli L jest listą zawierającą tylko stałe b i c
oraz F jest listą tej samej długości i zawierająca tyle samo elementów b i c co L,
ale wszystkie elementy b znajdują się na początku listy F, a wszystkie elementy c na koncu listy.
Program powinien działać poprawnie dla ustalonego pierwszego argumentu.

Przykład zapytania, które powinno odnieść sukces:

?-polflag([c,b,c,b,c],[b,b,c,c,c]).


Zadanie 2

Zdefiniuj predykat lagodny(L) odnoszący jednokrotny sukces jeśli L jest listą liczb naturalnych kończącą się zerem i o tej własności, że dla każdego elementu listy,
oznaczmy go przez n, jeśli n<>0 to n-1 kolejnych elementów po n tez jest <>0.

Przykłady zapytań, które powinny odnieść sukces:

?-lagodny([0]).
?-lagodny([0,0,0,0]).
?-lagodny([2,4,6,5,3,3,1,1,0]).
?-lagodny([4,3,5,2,2,1,1,0,1,3,2,1,0,0,4,1,1,1,0,2,1,0]).

Przyklady zapytań, które powinny odnieść porażkę:

?-lagodny([7]).
?-lagodny([3,2,1]).
?-lagodny([7,4,2,1,0]).
?-lagodny([3,2,1,0,0,5,4,3,2,0]).


Zadanie 3

Macierz reprezentowana jest jako lista list, kolejne listy to kolejne kolumny macierzy.
Zdefiniuj predykat pierwsze(M,P) odnoszący jednokrotny sukces
jeśli M jest macierzą a P jest listą, która ma długość równą liczbie wierszy macierzy,
i w której element z i-tej pozycji jest indeksem (tzn. numerem kolumny)
pierwszego niezerowego elementu w i-tym wierszu macierzy M.
Jeśli i-ty wiersz zawiera same zera, to wartość i-tego elementu P powinna być 0.
Program powinien działać poprawnie dla ustalonego pierwszego argumentu.

Przykłady zapytań, które powinny odnieść sukces:

?-pierwsze([[0,2],[3,3]],[2,1]).
?-pierwsze([[0,0],[0,1]],[0,2]).
?-pierwsze([[0,0,2],[0,0,3],[0,5,3]],[0,3,1]).

Przykłady zapytań, które powinny odnieść porażkę:

?-pierwsze([[0,2],[3,3]],[1,0]).
?-pierwsze([[0,0],[0,1]],[1,0]).
?-pierwsze([[0,0,2],[0,0,3],[0,5,3]],[3,3,2]).