gpt4 book ai didi

list - 如何删除列表中的元素?

转载 作者:行者123 更新时间:2023-12-02 15:15:30 28 4
gpt4 key购买 nike

我实现了一个函数,一个一个地删除列表中的元素:

remove(_,[])->
[];
remove(Elem, L)->
Rest = lists:delete(Elem,L),
remove(Elem,Rest).

但是当我尝试这个例子时它挂起了:

L = [1,2,3,4].
remove(hd(L), [L]).

它有什么问题?或者有没有更好的方法从列表的第一个元素开始一个一个地删除列表中的元素。

最佳答案

它形成了一个无限循环。首先,你打电话

remove(1, [1,2,3,4]) ->
[2,3,4] = lists:delete(1, [1,2,3,4]),
remove(1, [2,3,4]).

所以你打电话

remove(1, [2,3,4]) ->
[2,3,4] = lists:delete(1, [2,3,4]),
remove(1, [2,3,4]).

然后您使用相同的输入再次调用它,一次又一次。

修复它的一种方法是检查 lists:delete/2 是否返回相同的结果

remove(Elem, L)->
case lists:delete(Elem,L) of
L -> L;
Rest -> remove(Elem,Rest)
end.

(函数子句 remove(_,[]) 不是必需的,即使它不会造成任何伤害。)

但是还有一个更直接的方法:

remove(_, []) -> [];
remove(H, [H|T]) ->
remove(H, T);
remove(X, [H|T]) ->
[H | remove(X, T)].

可以使用列表理解来编写:

remove(X, L) ->
[Y || Y <- L, Y =/= X].

生成的代码将基本相同。

关于list - 如何删除列表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919555/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com