亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要用L值在函數:delete?

需要用L值在函數:delete?

炎炎設計 2019-02-13 15:11:21
我想把字符串定義為空 我用了strlen()函數就這個: strlen(stu[m].name)=0;我編譯就提示: 需要用L值在函數:delete請問錯在哪啊 有什么其他方法把字符串定義為空!謝謝了!~~~~
查看完整描述

2 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

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-22
  • 2 回答
  • 0 關注
  • 799 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號