92 = [2,2,3,5]. zero() -> [].

% Operacja inc wykonuje się w czasie stałym! inc([X,X|T]) -> [X+1|T]; inc([X|T]) -> [0,X|T]; inc([]) -> .

% [2,2,3,5] -> "101200". to_display([]) -> [$0]; to_display(L) -> to_display(L, [], false, 0).

to_display([X,X|T], Acc, _, X) -> to_display(T, [$2 | Acc], false, X+1); to_display([X|T], Acc, _, X) -> to_display(T, [$1 | Acc], false, X+1); to_display([_|_T]=L, Acc, _, X) -> to_display(L, [$0 | Acc], true, X+1); to_display([], Acc, true, _X) -> [$1 | Acc]; to_display([], Acc, false, _X) -> Acc.

% [2,2,3,5] -> [7,7,15,63]. to_exps(L) -> [ (1 bsl (X+1)) - 1 || X <- L ].

% [7,7,15,63] -> "63+15+7+7". to_sum([]) -> "0"; to_sum(L) -> string:join([ integer_to_list(P) || P <- to_exps(L) ], "+").

% [2,2,3,5] -> 92. to_number(L) -> lists:foldl(fun(X, Acc) -> Acc + ((1 bsl (X+1)) - 1) end, 0, L). %to_number2(L) -> lists:sum(to_exps(L)). % alternatywnie

% pokazuje pierwsze N liczb first(N) -> lists:foldl(fun(I, X) -> io:format("~p: \t~p \t= ~s \t= ~p \t= ~s_skew~n", [I-1, X, to_sum(X), to_number(X), to_display(X)]), inc(X) end, zero(), lists:seq(1, N)).

Wynik działania: