当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《请引导我完成这个"ErlangProgramming"递归样本》经验,为你挑选了1个好方法。

从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.

这是如何运作的?谢谢!



1> Logan Capald..:

一步一步

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]

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

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有