Разделить список Erlang на подсписки на основе сохраняющих значение пустых подсписков?

Есть ли способ получить список Erlang следующим образом:

Values = "Some||pipe|delimited|values"

И преобразовать его в список подсписков, сохранив пустые подсписки? Результирующий список будет выглядеть так:

["Some", [], "pipe", "delimited", "values"]

(В консоли пустые списки печатаются как [] вместо ""). Я пытался использовать string:tokens, но он не сохраняет пустые подсписки:

string:tokens("Some||pipe|delimited|values", "|"). 
%> ["Some","pipe","delimited","values"]

Есть ли простой способ сделать это? Возможно, это возможно с пониманием списка? Я относительно новичок в Erlang, поэтому любые советы очень ценятся.


person Stratus3D    schedule 19.05.2014    source источник
comment
Это невозможно со списками, так как они работают с каждым элементом изолированно. Вы можете написать рекурсивную функцию, которая использует lists:splitwith для получения элементов из списка.   -  person legoscia    schedule 19.05.2014


Ответы (1)


Как сказал legoscia, вы можете использовать lists:splitwith/2. Кроме того, вы можете рассмотреть возможность использования модуля re:

1> Values = "Some||pipe|delimited|values"
"Some||pipe|delimited|values"
2> re:split(Values, "\\|", [{return,list}]).
["Some",[],"pipe","delimited","values"]
person evnu    schedule 19.05.2014