Erlang编程实践启示
来源:互联网 发布:java linux ping ip 编辑:程序博客网 时间:2024/05/29 18:55
近日,在QQ聊天中看到一个做Erlang编程练习题,大致就是判断一个列表是否在另一个列表中出现。
实际上,我虽然学习Erlang有段时间,但没有真正去编写过软件或做大量编程。最初我写了这样一段程序来实现这个功能:
-module(test).-export([forteen/2]).forteen(A,B)->fun_sec(A,B,A,B0).fun_sec(_,[],_,_,_)->false;fun_sec([Ha|Ta],[Hb|Tb],A,B,Sum) when Ha==Hb -> if length(Ta)==0 ->[true,Sum]; true ->fun_sec(Ta,Tb,A,B,Sum) end;fun_sec(_,_,A,B,Sum)-> fun_sec(A,myy(Sum+1,B),A,B,Sum+1).myy(_,[])->[];myy(Sum,[_|T]) when Sum /=0 ->myy(Sum-1,T);myy(0,B)->B.
但总觉得不够Erlangic,于是再另行编写,最后结果如下:
-module(test).-export([forteen/2]).forteen(A,B)->fun_sec(A,B,[],0).fun_sec([],_,_,Sum) -> [true,Sum];fun_sec(A,B,_,_) when length(A)>length(B) -> false;fun_sec([H|Ta],[H|Tb],Samelst,Sum) ->fun_sec(Ta,Tb,[H|Samelst],Sum);fun_sec(A,[_|T],[],Sum)->fun_sec(A,T,[],Sum+1);fun_sec(A,B,Samelst,Sum)-> [_|T]= myy(Samelst,B),fun_sec(myy(Samelst,A),T,[],Sum+1).myy([],Res) -> Res;myy([H|T],Res) -> myy(T,[H|Res]).
姑且不谈程序的正确性如何,我觉得在编写Erlang程序时,还是与其它语言有较大的思维差别的。我觉得一般来说,其它语言很容易将功能处理单元写的很大,因为所有的处理都会在其中完成,写着写着就会大的不可收拾。记得看过一个公开课视频中一位JAVA老师说过,一个功能单元一般不应超过15个语句,再多的话,就要考虑分为另一个功能单元来完成。第一个程序,很显然有在功能单元中完成一切的倾向,所以并没有Erlangic,没有充分利用Erlang的匹配功能,而是将其放到when或if中。当然这里也不是说在函数中就不能用这些复杂的语句。既然简单的语句能处理好,何必写这么复杂的语句呢?
再看第二个程序,就是充分利用了函数参数中的匹配功能,从而达到简化函数内部语句的复杂性,从而使程序更易懂、易读。
0 0
- Erlang编程实践启示
- 编程快手的启示
- 褚霸 - Erlang开发实践
- 一道编程题目的启示
- QTP日志实践的几点启示
- Erlang 的Socket编程
- Erlang 元编程
- Erlang编程快速入门
- Erlang编程语言
- Erlang—并发编程
- erlang编程规范
- Erlang TCP编程Demo
- Erlang TCP编程:聊天室
- erlang编程注意事项
- Erlang中的并行编程
- Erlang并发编程(一)
- Erlang初步编程
- erlang 分布式编程问题
- POJ1363 Rails 栈+模拟
- PAT甲级练习1045. Favorite Color Stripe (30)
- 设计模式C++实现-简单工厂模式、工厂方法模式、抽象工厂模式
- Node.js批量刷CSDN博客访问量
- 【Javaweb】笔面试题 ---(1)
- Erlang编程实践启示
- 【CodeForces 777E】 Hanoi Factory(贪心+sort+模拟)
- 关于WIN10 VS2015下调试DirectX11 DEMO错误的解决方案
- 详细的Dagger2+MVP融合,一行一行分析,一点一点进步,之三
- 215. Kth Largest Element in an Array
- 软件测试面试题
- 九度OJ(1153题)
- hdu2307
- Java现实WebSocket