`

Erlang Programming Exercises

阅读更多

questions: http://www.erlang.org/course/exercises.html

 

my answers:


%Simple sequential programs

 

%1.

temp_f2c(F) -> 5*(F-32) div 9.

 

temp_c2f(C)  -> 9*C div 5 + 32.

%2.

temp_convert({c,X})  -> {f, temp_c2f(X)};

temp_convert({f,X})  -> {c, temp_f2c(X)}.

%3.

mathStuff_perimeter({square, Side}) -> 4*Side;

mathStuff_perimeter({circle, Radius}) -> 2*3.14*Radius;

mathStuff_perimeter({triangle, A, B, C}) -> A + B + C.

 

%Simple recursive programs

%1.

lists1_min([H | R]) -> lists1_min(R, H).

 

lists1_min([], Result) -> Result; 

lists1_min([H | R], Result) -> lists1_min(R, erlang:min(H, Result)).

 

%2.

lists1_max([H | R]) -> lists1_max(R, H).

 

lists1_max([], Result) -> Result; 

lists1_max([H | R], Result) -> lists1_max(R, erlang:max(H, Result)).

 

%3.

lists1_min_max(L) -> {lists1_min(L),  lists1_max(L)}.

%4.

listR2([_, _, C, D]) -> [C, D];

listR2([C, D]) -> [C, D];

listR2([D]) -> [48, D].

 

time_swedish_date() ->

{Y, M, D} = date(),

listR2(integer_to_list(Y)) ++ listR2(integer_to_list(M)) ++ listR2(integer_to_list(D)).

 

Interaction between processes, Concurrency

%1.

%2.

 

start(N, M, Msg) ->

% 创建进程N

PN = spawn(?MODULE, ring, [N, N, self()]),

receive

after 100 ->

% 把消息发给进程N

PN ! {Msg, M}

end.

% 创建进程

ring(0, _, _) ->

nil;

ring(N, N, _) ->

io:format("P~p run~n", [N]),

PN = self(),

Pnext = spawn(?MODULE, ring, [N - 1, N, PN]),

loop(N, N, PN, Pnext);

ring(I, N, PN) ->

io:format("P~p run~n", [I]),

Pnext = spawn(?MODULE, ring, [I - 1, N, PN]),

loop(I, N, PN, Pnext).

 

% 消息循环

loop(1, N, PN, Pnext) ->

receive

{Msg, Mi} ->

io:format("~p recv msg ~p~n", [1, Mi]),

% 进程1把接受到的消息发给进程N

PN ! {Msg, Mi},

loop(1, N, PN, Pnext);

_ -> nil

end;

loop(N, N, PN, Pnext) ->

receive

{_, 0} ->

io:format("~p recv msg 0~n", [N]),

% 进程N接受到最后一个消息,发stop消息

Pnext ! stop;

{Msg, Mi} ->

io:format("~p recv msg ~p~n", [N, Mi]),

Pnext ! {Msg, Mi - 1},

loop(N, N, PN, Pnext)

end;

loop(Pi, N, PN, Pnext) ->

receive

{Msg, Mi} ->

io:format("~p recv msg ~p~n", [Pi, Mi]),

Pnext ! {Msg, Mi},

loop(Pi, N, PN, Pnext);

_ -> nil

end.

 

 

 运行结果:

x:start(3,5, msg).   

P3 run

P2 run

P1 run

3 recv msg 5

{msg,5}

2 recv msg 4

1 recv msg 4

3 recv msg 4

2 recv msg 3

1 recv msg 3

3 recv msg 3

2 recv msg 2

1 recv msg 2

3 recv msg 2

2 recv msg 1

1 recv msg 1

3 recv msg 1

2 recv msg 0

1 recv msg 0

3 recv msg 0

 

%3.

 

分享到:
评论

相关推荐

    Erlang Programming 导读.pdf

    ### Erlang Programming 导读.pdf 知识点详解 #### 一、Erlang简介与特点 **Erlang**是一种通用的、并发性强的、容错性高的编程语言,适用于构建分布式系统的软件。它最初由爱立信公司开发,用于解决电信系统中的...

    Erlang编程语言The Erlang Programming Language

    这是《 Erlang编程语言》的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!

    erlang programming

    在“erlang programming”这个主题下,我们可以深入探讨以下几个关键知识点: 1. **Erlang语言基础**:Erlang是瑞典电信设备制造商Ericsson为解决实时通信系统需求而开发的。它采用函数式编程范式,强调纯函数和不...

    Programming Erlang.pdf

    本书《Programming Erlang》旨在帮助读者理解和掌握如何使用Erlang编程语言来构建并行世界中的软件。从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种...

    《Programming Erlang》

    《Programming Erlang》是Joseph Armstrong所著的一本详细介绍Erlang编程语言的书籍。这本书旨在帮助读者理解Erlang的设计哲学、语法特性以及如何利用它来构建高效、容错的并发系统。Erlang是一种静态类型、函数式...

    Pragmatic.Programming.Erlang.2nd.Edition

    ### 关于《Pragmatic Programming Erlang 第二版》的核心知识点概述 #### 一、书籍基本信息及背景介绍 《Pragmatic Programming Erlang 第二版》由Erlang之父Joe Armstrong撰写,是一本深入浅出地介绍了Erlang语言...

    Erlang Programming

    ### Erlang编程语言的核心知识点 #### 一、Erlang 解决的问题与应用场景 **Erlang** 是一种专门设计用于解决高度并发、分布式“软实时系统”开发问题的编程语言。它主要针对以下三个核心问题: 1. **快速高效地...

    programming erlang src code

    《编程Erlang》是Joe Armstrong所著的一本经典书籍,深入浅出地介绍了Erlang这门函数式编程语言,以及它在并发和分布式系统中的应用。源码分析可以帮助我们更深入地理解Erlang的内在机制和设计哲学。 Erlang是一种...

    Erlang的那几本书

    Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang Joe的那篇erlang论文 efficiecy guide

    erlang学习相关资料

    Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.

    Programming Erlang

    《Programming Erlang》是由Joe Armstrong编著的一本关于Erlang编程语言的经典著作。这本书深入浅出地介绍了Erlang的各个方面,旨在帮助读者理解和掌握这门强大的并发和分布式计算语言。 Erlang是一种静态类型、...

    Concurrent Programming in ERLANG (P1-90)

    **并发编程在Erlang中的应用(Concurrent Programming in ERLANG)** 本标题及描述明确指出了文档的主要内容是关于如何在Erlang语言中进行并发编程。Erlang是一种通用、并发、强类型、垃圾回收的编程语言,特别适用...

    Programming Erlang second edition

    《Programming Erlang second edition》是Joe Armstrong的经典著作,它是Erlang编程语言领域的权威指南,该书第二版于2013年首次发行。书中不仅覆盖了Erlang的核心语言和框架基础知识,还包括了重要的社区项目,例如...

Global site tag (gtag.js) - Google Analytics