Disons que j'ai une liste de mots, où un mot-clé, dans ce cas "stop", délimite des phrases complètes:
["Hello", "from", "Paris", "stop", "Weather", "is", "sunny", "stop", "Missing", "you", "stop"]
que je veux transformer en:
[["Hello", "from", "Paris"], ["Weather", "is", "sunny"], ["Missing", "you"]]
Je sais que je peux faire cela avec des chaînes avec String.split, mais idéalement, j'aimerais apprendre à résoudre le problème ci-dessus avec des constructions fonctionnelles fondamentales, telles que la récursivité sur [head | tail], etc., mais je ne peux pas savoir où commencer à accumuler des listes intermédiaires.
Voici une implémentation récursive de queue simple utilisant la correspondance de modèles:
defmodule Main do
def split_on(list, on) do
list
|> Enum.reverse
|> do_split_on(on, [[]])
|> Enum.reject(fn list -> list == [] end)
end
def do_split_on([], _, acc), do: acc
def do_split_on([h | t], h, acc), do: do_split_on(t, h, [[] | acc])
def do_split_on([h | t], on, [h2 | t2]), do: do_split_on(t, on, [[h | h2] | t2])
def main do
["Hello", "from", "Paris", "stop", "Weather", "is", "sunny", "stop", "Missing", "you", "stop"]
|> split_on("stop")
|> IO.inspect
end
end
Main.main
Production:
[["Hello", "from", "Paris"], ["Weather", "is", "sunny"], ["Missing", "you"]]
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras