Go walk trees的Erlang翻译
Erlang translation of Go walk trees
我正在尝试实现 here 中的 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).
我不确定这是否属于代码审查部分,因为我不确定我所做的是否是我想要的。该代码按预期工作(从某种意义上说它确实在树上行走)但是我不确定函数的设计是否是并发的。
该函数确实是并发的,因为您正在生成新进程来遍历子树。
你可能想改变 tree:walk/1
以便它 returns 原子 ok
在成功行走的情况下(我也用 [= 换掉 io:format/1
15=] 以便将值打印在单独的行上):
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.
我正在尝试实现 here 中的 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).
我不确定这是否属于代码审查部分,因为我不确定我所做的是否是我想要的。该代码按预期工作(从某种意义上说它确实在树上行走)但是我不确定函数的设计是否是并发的。
该函数确实是并发的,因为您正在生成新进程来遍历子树。
你可能想改变 tree:walk/1
以便它 returns 原子 ok
在成功行走的情况下(我也用 [= 换掉 io:format/1
15=] 以便将值打印在单独的行上):
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.