Erlang实战练习(二)

上节我们主要从最基本的程序入手,给出一些程序的Erlang代码,本文继续探讨Erlang程序。

 

练习1:求和!


  sum/1用于求前N个元素的和,sum(N,M)/2用于求从N到M之间所有元素的和,当N>M时,终止。代码如下: 

-module(sum).
-export([sum/1,sum/2,sum_compute/2]).

element(1) -> 1;
element(N) -> element(N-1) + 1.

sum(1) -> 1;
sum(N) -> sum(N-1) + element(N).

sum_compute(N,M) ->
    sum(M)-sum(N)+N.

sum(N,M) -> 
    if N=<M ->
        sum_compute(N,M);
        N>M -> io:format("N>M,return error!~n",[])
    end. 
        

 

练习2:创建列表。

比较简单,直接上代码:

-module(list_create).
-export([create/1,reverse_create/1]).

reverse(L) -> reverse(L,[]).

reverse([],L) -> L;
reverse([H|T],L) -> reverse(T,[H|L]).

create(N) -> create([],N).

create(L,0) -> L;
create(L,N) -> create([N|L],N-1).
        
reverse_create(N) -> reverse(create(N)).


练习3:输出满足条件的数。

比较简单,直接上代码:

-module(show_num).
-export([print/1,print/2,print_even/1,print_even/2]).

print(N) -> 
    io:format("Number:"),
    print(1,N).

print(N,N) -> io:format("~p~n",[N]);
print(First,N) -> 
    io:format("~p,",[First]),
    print(First+1,N).


print_even(N) ->
    io:format("Number:"),
    print_even(1,N).
    
print_even(N,N) ->
    if 
        N rem 2 =:=0 -> 
            io:format("~p~n",[N]);
        N rem 2 =:=1 ->
            io:format("End!~n")
    end;
print_even(First,N) ->
    if
        First rem 2 =:= 0 -> 
        io:format("~p,",[First]),print_even(First+1,N);
        First rem 2 =:=1 ->
        print_even(First+1,N)
    end.
    


练习4:汉诺塔。

运用递归的思想,比较简单,代码如下:

-module(hanoi).
-export([hanoi/1,move/4]).

%%There are N tower in Building A that must move to Building C via Building B.
hanoi(N) -> move(N,A,B,C).


move(1,A,B,C) -> io:format("Move disk 1 from A to C.~n");
move(N,A,B,C) ->
    move(N-1,A,C,B),
    io:format("Move disk ~p from ~p to ~p~n",[N,A,C]),
    move(N-1,B,C,A).
    


练习5:1-2+3-4+5-6+...+n

也比较简单,在偶数处加,奇数处减,代码如下:

-module(cross_arith).
-export([add/1,add/2,element/1]).

element(1) -> 1;
element(N) -> element(N-1) + 1.

add(N) -> add(N,0).

add(1,Sum) -> Sum + 1;
add(N,Sum) -> 
    A=element(N),
    if     
        A rem 2 =:=0 ->
            add(N-1,Sum-element(N));
        A rem 2 =:=1 ->
            add(N-1,Sum+element(N))
    end.
    


本文在上文的基础上继续探讨了一些基本的Erlang程序,通过这些程序你应该能发现Erlang在编写程序时的简洁性了。下节将探讨冒泡排序、插入排序以及一些趣味问题,如打印九九乘法表等。(注:由于个人能力有限,有些地方难免繁琐或者有疏漏,不吝赐教。)

 

转载于:https://www.cnblogs.com/itfreer/archive/2012/05/04/Erlang_in_practise_2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值