erlang:奇偶判断(spawn,register)

是对一个数 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> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值