Erlang列出:foreach副作用

Tal*_*Kit 4 erlang

可以使用list:foreach函数来删除回调函数中的元素吗?即如果修改迭代发生的列表会有任何问题.

A. *_*rid 5

我想这个简单的答案是否定的.

lists:foreach/2function用于在列表中的所有元素上运行特定函数.除此之外,它还返回ok原子.它不会返回列表,正如文档所定义的那样.

foreach(Fun, List) -> ok
呼吁Fun(Elem)每个元素ElemList.此功能用于其副作用,评估顺序定义为与列表中元素的顺序相同.

如果要对每个元素执行某些功能并返回包含此函数结果的列表,则可以使用lists:map/2.虽然,请注意,相反foreach,map不保证任何评估顺序.

如果您只想从列表中删除元素,请使用lists:delete/2.

  • 我猜副作用意味着它不返回任何东西,它只是用于为列表中的每个元素运行一些东西,而不关心它的返回值.例如,如果你想发送一些进程`Pid``List`的所有元素,你可以做`list:foreach(fun(E) - > Pid!E end,List)`. (2认同)
  • 请注意,使`foreach`适合具有副作用的函数的特定属性是保证将该函数应用于列表顺序之后的列表元素.即使您可以使用`map`并忽略结果,理论上的地图也不保证任何评估顺序(因为评估顺序与纯函数无关) (2认同)