gpt4 book ai didi

erlang - erlang中并行快速排序的问题

转载 作者:行者123 更新时间:2023-12-02 11:39:20 25 4
gpt4 key购买 nike

我在 erlang 中编写快速排序时遇到问题。我正在做的是生成两个进程,然后阻止当前进程,直到我得到左右子数组的响应。得到这两个响应后,我向其父级发送一条消息,为其提供计算列表。 家长! {self(), Lone++ [H]++ Ltwo}

但是我在两个子进程中都遇到了获取 undef 的错误。这是代码。

  quick(Parent, []) -> Parent ! {self(), []};
quick(Parent, [H | T]) ->
Pone = spawn_link(main, quick, [ self(), [ X || X <- T, H >= X ] ]) ,
Ptwo = spawn_link(main, quick, [ self(), [ Y || Y <- T, H < Y ] ]) ,
receive
{Pone, Lone} ->
receive
{Ptwo, Ltwo} -> Parent ! {self(), Lone ++ [H] ++ Ltwo}
end;
{Ptwo, Ltwo} ->
receive
{Pone, Lone} -> Parent ! {self(), Lone ++ [H] ++ Ltwo}
end
end.

sortquick(List) ->
quick(self(), List).

称为:

main:sortquick([12,4,7,22,25]).

最佳答案

代码本身不是问题。快速排序效果很好。您在子进程中得到 undef 的原因可能是由于函数 Quick/2 根本没有导出。当您使用模块和函数调用spawn_link时,需要导出该函数。

您可以通过添加来解决此问题

-export([quick/2]).

或者通过将spawn_links更改为类似的内容

spawn_link(fun() -> quick(Self, [Y || Y <- T, H < Y]) end

尽管如果您采用后一种方式,则需要创建一个变量

Self = self()

在您调用电话之前,否则它不会返回到正确的流程。

关于erlang - erlang中并行快速排序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643568/

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