从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.
这是如何运作的?谢谢!
一步一步
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]
在一张纸上手工处理这些功能总是很好的,只需一点点输入就可以了解它.你很快就会看到它是如何工作的.