为了账号安全,请及时绑定邮箱和手机立即绑定

Go walk 树的 Erlang 翻译

Go walk 树的 Erlang 翻译

Go
浮云间 2021-09-20 20:37:51
我正在尝试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).我不确定这是否属于代码审查部分,因为我不确定我所做的是我想要的。该代码按预期工作(从某种意义上说,它确实会遍历一棵树),但是我不确定该函数的设计是否是并发的。
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

该函数确实是并发的,因为您正在生成新进程来遍历子树。


您可能想要更改,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.


查看完整回答
反对 回复 2021-09-20
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信