在Erlang中区分字符串与列表

时间:2011-11-07 06:45:55

标签: erlang

在Erlang中,当你有一个可打印字符列表时,它是一个字符串,但字符串也是一个项目列表,列表的所有功能都可以应用到字符串上。理想情况下,数据结构:字符串在erlang中不存在。

我的部分代码需要确保某些东西不仅是一个列表,而且是一个字符串。 (一个真正的字符串)。它需要分开列表,例如 [1,2,3,a,b,"josh"] ,来自字符串,例如"Muzaaya" 。对于字符串和列表,保护表达式is_list/1将说true。没有像 is_string/1 这样的后卫,所以这意味着我需要一个代码片段来确保我的数据是一个字符串。在这种情况下,字符串是仅可打印的列表(字母,两种情况,上部和下部),并且可以包含数字,例如"Muzaaya2536 618 Joshua"。我需要一个代码片段(Erlang)来检查我并确保变量是一个字符串,而不仅仅是一个列表。感谢

2 个答案:

答案 0 :(得分:24)

模块io_lib中有两个功能可以提供帮助:io_lib:printable_list/1io_lib:printable_unicode_list/1测试参数是否为可打印的 latin1 列表或分别为 unicode 字符。

答案 1 :(得分:6)

使用isprint(3)定义可打印字符 -

isprint(X) when X >= 32, X < 127 -> true;
isprint(_) -> false.

is_string(List) when is_list(List) -> lists:all(fun isprint/1, List);
is_string(_) -> false.
但是,你将无法用它作为后卫。