是对一个数 n,向下便利,判断是奇数还是偶数,一直到0为止。
最开始学习的时候,一直抱错,觉得很奇怪,卡了2个小时,才发现原来是 export 里面没有添加 f1和f2,一直觉得只要没有用到就不需要添加了,具体原因还不知道,可能还需要进一步学习
方法一:
-module(test).
-export([f/1,f2/2,f1/0]).
f2(0,F1_pid)->
F1_pid ! fin,
io:format("f2 end!~n");
f2(N,F1_pid)->
if
N rem 2 == 1 ->
io:format("~15s:~15s:~15w~n",[f2,jishu,N]),
io:format("~w has been done by f2~n",[N]);
true ->
F1_pid ! {N,self()},
receive
ok ->
io:format("~w has been done by f1~n",[N])
end
end,
f2(N-1,F1_pid).
f1()->
receive
{N,F2_pid} ->
io:format("~15s:~15s:~15w~n",[f1,oushu,N]),
F2_pid ! ok,
f1();
fin ->
io:format("f1 end!~n")
end.
f(N)->
F1_pid = spawn(test,f1,[]),
spawn(test,f2,[N,F1_pid]).
方法二(register):
-module(test).
-export([f/1,f2/1,f1/0]).
f2(0)->
f1 ! fin,
io:format("f2 end!~n");
f2(N)->
if
N rem 2 == 1 ->
io:format("~15s:~15s:~15w~n",[f2,jishu,N]),
io:format("~w has been done by f2~n",[N]);
true ->
f1 ! {N,self()},
receive
ok ->
io:format("~w has been done by f1~n",[N])
end
end,
f2(N-1).
f1()->
receive
{N,F2_pid} ->
io:format("~15s:~15s:~15w~n",[f1,oushu,N]),
F2_pid ! ok,
f1();
fin ->
io:format("f1 end!~n")
end.
f(N)->
register(f1, spawn(test,f1,[])),
spawn(test,f2,[N]).
延时5秒关闭:
-module(test).
-export([f/1,f2/2,f1/0]).
f2(0,_)->
io:format("f2 end!~n");
f2(N,F1_pid)->
if
N rem 2 == 1 ->
io:format("~15s:~15s:~15w~n",[f2,jishu,N]),
io:format("~w has been done by f2~n",[N]);
true ->
F1_pid ! {N,self()},
receive
ok ->
io:format("~w has been done by f1~n",[N])
end
end,
f2(N-1,F1_pid).
f1()->
receive
{N,F2_pid} ->
io:format("~15s:~15s:~15w~n",[f1,oushu,N]),
F2_pid ! ok,
f1()
after 5000 ->
io:format("f1 end!~n")
end.
f(N)->
F1_pid = spawn(test,f1,[]),
spawn(test,f2,[N,F1_pid]).
1> c(test).
{ok,test}
2> test:f(5).
f2: jishu: 5
<0.40.0>
5 has been done by f2
f1: oushu: 4
4 has been done by f1
f2: jishu: 3
3 has been done by f2
f1: oushu: 2
2 has been done by f1
f2: jishu: 1
1 has been done by f2
f2 end!
f1 end!
3>