Here's one way to do it:
defmodule Cons do
def each_cons(list, n // 2), do: _each_cons(list, n, [])
defp _each_cons(list, n, result) when length(list) < n do
Enum.reverse result
end
defp _each_cons(list = [_ | tail], n, result) do
_each_cons(tail, n, [Enum.take(list, n)|result])
end
end
IO.inspect Cons.each_cons('words') # → ['wo', 'or', 'rd', 'ds']
IO.inspect Cons.each_cons('words', 3) # → ['wor', 'ord', 'rds']
IO.inspect Cons.each_cons('words', 4) # → ['word', 'ords']
Dave
--
You received this message because you are subscribed to the Google Groups "elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-co...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Here's one way to do it:
defmodule Cons do def each_cons(list, n // 2), do: _each_cons(list, n, []) defp _each_cons(list, n, result) when length(list) < n do Enum.reverse result end defp _each_cons(list = [_ | tail], n, result) do _each_cons(tail, n, [Enum.take(list, n)|result]) end end IO.inspect Cons.each_cons('words') # → ['wo', 'or', 'rd', 'ds'] IO.inspect Cons.each_cons('words', 3) # → ['wor', 'ord', 'rds'] IO.inspect Cons.each_cons('words', 4) # → ['word', 'ords']