erlang程序解析问题

2025-05-14 08:21:00
推荐回答(1个)
回答(1):

loop1/3负责对第二个参数进行遍历,这个函数要做的是合并二元组中第一个值相同的项,这个函数有三个参数:
第一个参数是个二元组:{X, N1}; 第二个参数是个包含很多二元组的列表T;第三个参数是个列表L。

第一个分支loop1({X,N1},[{X,N2}|T] ,L)的意思是匹配第一个参数{X,N1}中的X与第二个参数的[{X,N2}|T]中的X, 两个X是同一个值,就执行此分支;
第二个分支loop1({X,N1},[{Y,N2}|T] ,L)的意思是匹配第一个参数{X,N1}中的X与第二个参数的[{X,N2}|T]中的X, 两个X不是同一个值就执行此分支;
第三个分支loop1(X,[],L),表示列表已遍历完,返回结果{X,L}.

add/2对参数1进行遍历,
merge/2负责合并参数1、参数2两个列表,然后调用add。

这三个函数都是尾递归,loop1/3用到了模式匹配,新手可能不太习惯,
希望能帮到你!

运行例子:
(test@chaodeMacBook-Pro.local)2> t:merge([{1,10},{1,20},{2,77},{3,80},{3,90}], []).

[{3,170},{1,30},{2,77}]