Go walk树的Erlang翻译

I am trying to implement the Walk function from here which is implemented in Go into erlang.

Here is the result:

-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).

I'm not sure if this belongs to the code review section as I'm not sure that what I did is what I wanted. The code works as expected (in the sense that it does walk a tree) however I'm not sure if the design of the function is concurrent.

The function is indeed concurrent, as you are spawning new processes to walk the subtrees.

You might want to alter tree:walk/1 so that it returns the atom ok in the case of a successful walk (I also switch out io:format/1 with erlang:display so that values are printed on separate lines):

walk({Left, Value, Right}) ->
    spawn(tree,walk,[Left]),
    erlang:display(Value),
    spawn(tree,walk,[Right]),
    ok;
walk({}) -> continue.

Here is a synchronous version of the same function. Instead of processes, we use recursion:

walk_sync({Left, Value, Right}) ->
    walk_sync(Left),
    erlang:display(Value),
    walk_sync(Right);
walk_sync({}) -> continue.