我正在尝试构建一个非常简单的屏障--同步服务器,在这个服务器上,最初会向它提供一些与之通信的进程。当一个进程完成时,它会收到一条带有该进程的Pid的消息,并保存一个要执行此操作的每个进程的列表。当障碍达到零时(所有进程都发送了消息),我的服务器需要向每个进程发送一条消息(我使用[Pid | ProcList]作为pids列表)。
我尝试过使用helper函数,但是没有用,列表理解让我陷入了无限循环,因此我正在研究如何使用list :foreach来解决这个问题。我是函数式编程的新手,但据我所知,这个foreach需要接受列表以及一个lambda-calculus函数来向列表中的每个节点发送消息。由于"!“的中缀性质,我还没有找到一种方法来做到这一点而不会导致语法错误。
发布于 2015-03-23 16:23:12
你是如何在列表理解中进行无限循环的?我必须说,这是相当具有挑战性的。试试这个:
Message = % broadcast message goes here
ListOfPids = % list of recipients
[Pid ! Message || Pid <- ListOfPids].如果你想使用foreach,那么它接受一个参数函数作为第一个参数,所以需要首先包装send,因为它是两个参数函数。
Message = % broadcast message goes here
ListOfPids = % list of recipients
Fun = fun (Pid) -> Pid ! Message end,
lists:foreach(Fun, ListOfPids).https://stackoverflow.com/questions/29202649
复制相似问题