Go walk 树的 Erlang 翻译

我正在尝试Walk从这里实现在 Go into erlang 中实现的功能。


结果如下:


-module(tree).

-export([walk/1,test/0]).



walk({Left, Value, Right}) ->

    spawn(tree,walk,[Left]),

    io:format(Value),

    spawn(tree,walk,[Right]);

walk({}) -> continue.




test() ->

B = {{}, alina, {}},

D = {{},vlad,{}},

C = {D, tea, {}},

A = {B,maria,C},

walk(A).

我不确定这是否属于代码审查部分,因为我不确定我所做的是我想要的。该代码按预期工作(从某种意义上说,它确实会遍历一棵树),但是我不确定该函数的设计是否是并发的。


浮云间
浏览 182回答 1
1回答

杨__羊羊

该函数确实是并发的,因为您正在生成新进程来遍历子树。您可能想要更改,tree:walk/1以便ok在成功行走的情况下返回原子(我也切换出来io:format/1,erlang:display以便将值打印在单独的行上):walk({Left, Value, Right}) ->    spawn(tree,walk,[Left]),    erlang:display(Value),    spawn(tree,walk,[Right]),    ok;walk({}) -> continue.这是相同功能的同步版本。我们使用递归代替进程:walk_sync({Left, Value, Right}) ->    walk_sync(Left),    erlang:display(Value),    walk_sync(Right);walk_sync({}) -> continue.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go