defmodule Demo do
def while(pred, next, data) do
case pred.(data) do
true ->
while(pred, next, next.(data))
_ ->
data
end
end
def positive_non_zero?(i),
do: i > 0
def say_hello_once(i) do
IO.puts("hello")
i - 1
end
def demo1,
do: while(&positive_non_zero?/1, &say_hello_once/1, 10)
def demo2 do
data = {1.01, [1.01, 1.02, 1.04]}
p = fn {i,p} ->
i in p
end
n = fn {last, p} ->
i = last + 0.01
IO.puts(i)
{i, p}
end
while(p, n, data)
end
end
IO.puts("# demo1")
IO.inspect(Demo.demo1())
IO.puts("# demo2")
IO.inspect(Demo.demo2())
$ elixir demo.exs
# demo1
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
0
# demo2
1.02
1.03
{1.03, [1.01, 1.02, 1.04]}
$
Refactoring: Replace Iteration with Recursion
Refactoring: Replace Recursion with Iteration
Recursion to Iteration Series
Recursion? We don’t need no stinking recursion!


















