Erlang 基础操作 练习题

 1 %    ******************************************************************************
 2 %    ------------------------------------------------------------------------------
 3 %    习题 5
 4 %         合并列表,A=[{a,1},{b,2},{c,3},{b,1}],B=[{b,4},{c,5},{d,6},{d,2}].
 5 %            结果:[{a,1},{b,7},{c,8},{d,8}]
 6 %        D=[{a,3},{f,14},{k,39},{f,22},{g,88},{d,23}].
 7 %    把B列表合并到A列表,新增的放后面,不能用++
 8 %    ------------------------------------------------------------------------------
 9 
10 
11 test5( A, B )  ->
12     M = test5a_2( A,[] ),
13     test5a_2( B, M ).
14 
15 test5a_1( E, [Th|T], F, R ) ->
16     {Flag,V} = match(E ,Th),
17     test5a_1( E, T, Flag or F, [V|R] );
18 test5a_1( E, [], F, R ) ->
19     case F of
20         true  ->
21             R;
22         false ->
23             [E|R]
24     end.
25 
26 test5a_2( [Th|T], R ) ->
27     M = test5a_1( Th, R, false, [] ),
28     Mr= lists:reverse(M),
29     test5a_2( T, Mr ) ;
30 test5a_2( [], R ) ->
31     R.
32 
33 
34 %    匹配成功,返回处理后的值,失败返回匹配B值
35 match( {Nam,ValA}, {Nam,ValB} )  ->
36     { true, {Nam,ValA+ValB} } ;
37 match( _, Th )  ->
38     { false, Th }.

 

posted @ 2015-03-13 00:01  qinpan  阅读(386)  评论(0编辑  收藏  举报