X-Git-Url: https://git.xandkar.net/?p=hope.git;a=blobdiff_plain;f=src%2Fhope_list.erl;h=b93ad2d346d08d42f5dd277907de7255114ea1cb;hp=9ce451e927d454940d3dca236266492dd6b61051;hb=c66ddf8079f01284853e24ca129062c3d11229b0;hpb=4af0774b16181c76d0deedf0911d53409c8f1078 diff --git a/src/hope_list.erl b/src/hope_list.erl index 9ce451e..b93ad2d 100644 --- a/src/hope_list.erl +++ b/src/hope_list.erl @@ -6,6 +6,7 @@ -export( [ unique_preserve_order/1 + , map_rev/2 ]). @@ -13,6 +14,22 @@ [A]. +%% @doc O(N), tail-recursive equivalent to lists:rev(lists:map(F, L)) +%% @end +-spec map_rev([A], fun((A) -> (B))) -> + [B]. +map_rev(Xs, F) -> + map_rev_acc(Xs, F, []). + +-spec map_rev_acc([A], fun((A) -> (B)), [B]) -> + [B]. +map_rev_acc([], _, Ys) -> + Ys; +map_rev_acc([X|Xs], F, Ys) -> + Y = F(X), + map_rev_acc(Xs, F, [Y|Ys]). + + -spec unique_preserve_order(t(A)) -> t(A). unique_preserve_order(L) ->