如何获取列表的类型.如果列表是proplist,我想执行代码.我们说吧L = [a,1,b,2,c,3, ...]
.列表是L,我正在将它转换为proplist
L = [{a,1}, {b,2}, {c,3}, ...].
Run Code Online (Sandbox Code Playgroud)
如何确定列表是否为proplist?erlang:is_list/1
对我没用.
您可以使用以下内容:
is_proplist([]) -> true;
is_proplist([{K,_}|L]) when is_atom(K) -> is_proplist(L);
is_proplist(_) -> false.
Run Code Online (Sandbox Code Playgroud)
但有必要考虑这个功能不能用于警卫.
您需要检查列表中的每个元素是否是两个元素的元组.可以使用列表完成:all/2:
is_proplist(List) ->
is_list(List) andalso
lists:all(fun({_, _}) -> true;
(_) -> false
end,
List).
Run Code Online (Sandbox Code Playgroud)
当然,这取决于您使用的"proplist"的定义.以上是"proplist"通常所指的内容,但是proplists模块的文档说:
属性列表是普通列表,包含元组形式的条目,其第一个元素是用于查找和插入的键,或者原子,它们用作元组的简写
{Atom, true}
.