Skip to content

Instantly share code, notes, and snippets.

@sunaku
Created September 15, 2015 23:54
Show Gist options
  • Save sunaku/445900678be17fc5f2fe to your computer and use it in GitHub Desktop.
Save sunaku/445900678be17fc5f2fe to your computer and use it in GitHub Desktop.
Persistent zipping (interleaving) in Elixir.
defmodule Interleave do
def interleave(a, b, result \\ [])
def interleave([], [], result), do: result |> Enum.reverse
def interleave([], b, result), do: interleave(b, [], result)
def interleave([h|t], b, result), do: interleave(b, t, [h | result])
end
iex(1)> split = Regex.split(~r/x/, "fooxbar")
["foo", "bar"]
iex(2)> scan = Regex.scan(~r/x/, "fooxbar")
[["x"]]
iex(3)> Enum.zip(split, scan)
[{"foo", ["x"]}]
iex(4)> Interleave.interleave(split, scan)
["foo", ["x"], "bar"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment