Erlang实战练习(一)

前两次主要讲了Erlang并发与并发的一些概念,为了更加快速的直接切入主题,我不再接着上次的话题,从本文开始,主要从实战角度分析Erlang、学习Erlang、总结Erlang。

练习1:生成斐波那契数列

此练习比较简单,结果自己去测验,直接上代码:

-module(feibo).  %% 模块名与文件名feibo.erl一致
-export([feibo_list/1,element/1]).%%导出函数element、feibo_list,其中反斜杠"/"后面跟的整数值表示函数的参数个数

%% 编译:c(feibo).
%% 运行:feibo:feibo_list(5).
%% 结果示例:【1,1,2,3,5】

%% 函数element主要为了计算斐波那契数列的第N个元素 element(
1) -> 1; element(2) -> 1; element(N) -> element(N-1) + element(N-2). %% 给定一个N,求出斐波那契的前N个数
feibo_list(N)
-> feibo_list([], N). feibo_list(L, 0) -> L; feibo_list(L, N) -> feibo_list([element(N)|L], N-1).


练习2:求列表元素平均值

此练习也是比较基础,结果自己去测验,不再多解释,直接上代码:

-module(average).
-export([num/1,sum/1,count_average/1]).

num([]) -> 0; 
num([H|T]) -> 1+num(T).

sum([]) -> 0;
sum([H|T]) -> H + sum(T).

count_average([]) -> 0;
count_average(L) -> sum(L)/num(L).


练习3:12+22+32+42+52+…+n2

此练习也是比较基础,输入为N,输出为前N个数的平方和,直接上代码:

-module(square).
-export([sum_square/1]).

compute_square(X) -> X*X.

sum_square(1) -> compute_square(1);
sum_square(N) -> sum_square(N-1) + compute_square(N).

练习4:将两个列表连接起来
将列表L1和L2连接起来,将L2的元素依次加入L1,代码如下:

-module(lists_concat).
-export([concat/2,reverse/1,rconcat/2]).

%%函数reverse将列表逆置
reverse(L)
-> reverse(L,[]). reverse([],L) -> L; reverse([H|T],L) -> reverse(T,[H|L]). concatenate(L1,L2) -> concat(L1,reverse(L2)). concat(L,[]) -> L; concat(L,[H|T]) -> concat([H|L],T).

练习5:快速排序。
这个快排在教材中有提到,网上也有很多,可以借鉴,主要是用到了列表的连接、列表解析等操作,此题不解释,代码如下:

-module(quick_sort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|T]) ->
    qsort([X||X <- T,X < Pivot])
    ++[Pivot]++
    qsort([X||X <- T,X >= Pivot]).
    
    

本节主要通过5个基本的联系让我们对Erlang的实战进行了一定程度的认识,接下去我还会有大概10几个练习的专题来学习讨论Erlang,我觉得从小练习与试验中学习不仅能学到知识,更重要的是因为兴趣而快乐,因为快乐而充实。(注:由于个人能力有限,有些地方难免繁琐或者有疏漏,不吝赐教。)

 

posted @ 2012-05-04 19:57  chinagragon  阅读(5271)  评论(0编辑  收藏  举报

Powered by中国龙 博客空间 IT闲人,不干实事