在Erlang中区分字符串与列表

Muz*_*hua 9 erlang

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

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

rvi*_*ing 24

你有模块中的两个功能io_lib可以是有益的:io_lib:printable_list/1io_lib:printable_unicode_list/1其测试,如果参数是可打印的清单LATIN1Unicode的分别人物.


小智 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.
Run Code Online (Sandbox Code Playgroud)

但是你不能用它作为后卫.