请引导我完成这个"Erlang Programming"递归样本

mpa*_*raz 4 erlang recursion

从Cesarini和Thomson的Erlang Programming第90页开始,有一个例子没有详细讨论.我是函数式编程和递归思维的新手,所以我不熟悉以这种方式解决问题.

"例如,以下函数通过交错它们的值来合并两个列表(长度相同):"

merge(Xs,Ys) -> lists:reverse(mergeL(Xs,Ys,[])).

mergeL([X|Xs],Ys,Zs) ->  mergeR(Xs,Ys,[X|Zs]);
mergeL([],[],Zs) ->  Zs.

mergeR(Xs,[Y|Ys],Zs) ->  mergeL(Xs,Ys,[Y|Zs]);
mergeR([],[],Zs) ->  Zs.
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?谢谢!

Log*_*ldo 7

一步一步

merge([1,2],[3,4])
reverse(mergeL([1,2],[3,4],[]))
reverse(mergeR([2],[3,4],[1]))
reverse(mergeL([2],[4],[3,1]))
reverse(mergeR([], [4], [2,3,1]))
reverse(mergeL([], [], [4,2,3,1]))
reverse([4,2,3,1])
[1,3,2,4]
Run Code Online (Sandbox Code Playgroud)

在一张纸上手工处理这些功能总是很好的,只需一点点输入就可以了解它.你很快就会看到它是如何工作的.