Определение, является ли объект строкой или списком в Erlang

Я пишу программу, которая может иметь или список или строку как аргумент. Как я могу сказать различие между строкой и списком программно в Erlang. Что-то как:

print(List) -> list; 
print(String) -> string.
5
задан Yazz.com 19 March 2010 в 18:32
поделиться

3 ответа

io_lib: printable_list может быть тем, что вы ищете. Однако он не обрабатывает только Unicode-кодировки latin-1. Если вам нужно обнаружить строки Unicode, я думаю, вам может не повезти. Лучше всего использовать псевдотипирование ваших списков следующим образом: {string, [$ a, $ b, $ c]}. Этакая сборка твоих типов.

используйте такой конструктор, как строка (L), когда is_list (L) -> {строка, L}.

и просто используйте эту конструкцию ввода во всем приложении.

С другой стороны, вы можете просто рассматривать все строки как просто списки и не делать различий.

6
ответ дан 18 December 2019 в 14:44
поделиться

Зачем вам нужно их разделять? Строки - это списки на erlang (в большинстве случаев).

0
ответ дан 18 December 2019 в 14:44
поделиться

Лучшее, что вы можете сделать, это пометить ваши структуры, как предложил Джереми Уолл . В любом случае вы можете решить проверить вход в ваш модуль/подсистему/приложение/...

is_string([]) -> true;
is_string([X|T]) -> is_integer(X) andalso X>=0 andalso is_string(T);
is_string(_) -> false.

К сожалению, это дорогая операция, и вы не можете использовать ее в охранниках.

4
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: