为了账号安全,请及时绑定邮箱和手机立即绑定

需要用L值在函数:delete?

需要用L值在函数:delete?

芜湖不芜 2019-02-05 10:05:10
我想把字符串定义为空 我用了strlen()函数就这个: strlen(stu[m].name)=0;我编译就提示: 需要用L值在函数:delete请问错在哪啊 有什么其他方法把字符串定义为空!谢谢了!~~~~
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

Erlang中删除列表元素在标准模块lists中可以找到delete/2函数,

比如调用lists:delete(2, [1,2,3,4,5])后将返回新的列表[1,3,4,5]
笔者在翻阅lists模块源码中发现,一些函数实现成BIF,比如reverse就是一个BIF,在注释中发现

%% reverse(L) reverse all elements in the list L. Is now a BIF!

由此确定reverse是一个BIF。
但对delete函数的实现没找到类似的注释,怀疑其不是一个BIF,其实现存在性能问题,其实现代码如下:
delete(Item, [Item|Rest]) -> Rest;
delete(Item, [H|Rest]) ->
[H|delete(Item, Rest)];
delete(_, []) -> [].

这个实现没使用尾递归,对大表的操作将会导致堆栈上的内存消耗严重。
测试程序如下:

test1() ->
{ok,Bin} = file:read_file("file1.txt"),
L = binary_to_list(Bin),
R = lists:delete($a,L),
io:format("~p~n",[length(R)]).



查看完整回答
反对 回复 2019-03-21
  • 2 回答
  • 0 关注
  • 578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信