Last active
June 24, 2016 07:08
-
-
Save pragtobgists/92fd7983dbf7d47f6d36d1cbf27495a2 to your computer and use it in GitHub Desktop.
Map implementations both with TCO and without
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule MyMap do | |
def map_tco(list, function) do | |
Enum.reverse _map_tco([], list, function) | |
end | |
defp _map_tco(acc, [head | tail], function) do | |
_map_tco([function.(head) | acc], tail, function) | |
end | |
defp _map_tco(acc, [], _function) do | |
acc | |
end | |
def map_tco_arg_order(list, function) do | |
Enum.reverse do_map_tco_arg_order(list, function, []) | |
end | |
defp do_map_tco_arg_order([], _function, acc) do | |
acc | |
end | |
defp do_map_tco_arg_order([head | tail], function, acc) do | |
do_map_tco_arg_order(tail, function, [function.(head) | acc]) | |
end | |
def map_tco_concat(acc \\ [], list, function) | |
def map_tco_concat(acc, [head | tail], function) do | |
map_tco_concat(acc ++ [function.(head)], tail, function) | |
end | |
def map_tco_concat(acc, [], _function) do | |
acc | |
end | |
def map_body([], _func), do: [] | |
def map_body([head | tail], func) do | |
[func.(head) | map_body(tail, func)] | |
end | |
def map_tco_no_reverse(list, function) do | |
_map_tco([], list, function) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment