/**/ fib(0, [0]). fib(1, [1,0]). fib(N, [R, X, Y | Zs]) :- N > 1, N1 is N - 1, fib(N1, [X, Y | Zs]), R is X + Y. % wrong naive impl reverse([], []). reverse([x], [x]). reverse([Head|Tail], [RNew, Head]) :- reverse(Tail, RNew). accrev([H|T], Acc, R) :- accrev(T, [H|Acc], R). accrev([], R, R). rev(L, R) :- accrev(L, [], R). smol([S], S). smol([H|T], S) :- smol(T, Snew), Snew < H -> S is Snew; S is H. % not working accsortt([], Acc, Acc). accsortt([H1 | T], Acc, R) :- H2 | T, H1 < H2 -> accsortt(T, [H1, H2 | Acc], R); accsortt(T, [H2, H1 | Acc], R). sortt(L, R) :- accsortt(L, [], R).