确定项目是否是Erlang中的字符串或列表

Zub*_*air 5 erlang

我正在编写一个程序,可以有一个列表或一个字符串作为参数.如何在Erlang中以编程方式区分字符串和列表.就像是:

print(List) -> list; 
print(String) -> string.
Run Code Online (Sandbox Code Playgroud)

Jer*_*all 6

io_lib:printable_list可能就是你要找的东西.但是它不处理unicode只有latin-1编码.如果你需要检测unicode字符串,我想你可能会运气不好.最好的选择是伪输入你的列表,如:{string,[$ a,$ b,$ c]}.有点构建你的类型.

当is_list(L) - > {string,L}时,使用像string(L)这样的构造函数.

并通过您的应用程序使用该键入构造.

另一方面,您可以将所有字符串视为仅列表,而不是区分.


Hyn*_*dil 5

你能做的最好的事情就是按照Jeremy Wall 的 建议标记你的结构。无论如何,您可以决定检查模块/子系统/应用程序/...的输入

is_string([]) -> true;
is_string([X|T]) -> is_integer(X) andalso X>=0 andalso is_string(T);
is_string(_) -> false.
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是昂贵的操作,并且你不能在守卫中使用它。