Skip to content

Instantly share code, notes, and snippets.

@gorkaio
Created June 6, 2020 12:15
Show Gist options
  • Save gorkaio/94658f696a47108b22b9e459a43febbb to your computer and use it in GitHub Desktop.
Save gorkaio/94658f696a47108b22b9e459a43febbb to your computer and use it in GitHub Desktop.
-module(composition).
-export([twice/2,compose/2,iterate/1]).
-export([test/0]).
%% Composition
compose(F, G) ->
fun (X) -> F(G(X)) end.
%% Iteration
iterate(N) ->
Iterate = fun Iterate(0, F) -> F; Iterate(M, F) -> Iterate(M - 1, compose(F, F)) end,
fun (F) -> Iterate(N, F) end.
iterate_test() ->
4 = ((iterate(0))(fun (X) -> 2*X end))(2),
8 = ((iterate(1))(fun (X) -> 2*X end))(2),
passed.
%% Twice
twice(F, X) ->
(compose(F, F))(X).
twice_test() ->
18 = twice(fun(X) -> 3 * X end, 2),
32 = twice(fun (X) -> twice(fun (Y) -> 2*Y end, X) end, 2),
passed.
test() ->
twice_test(),
iterate_test(),
passed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment