Erlang语言学习入门

学习资料:

  1. 官方Doc:http://www.erlang.org/doc.html
  2. 写的特别详细: http://www.cnblogs.com/zhengsyao/ (强推,写得很详细)
  3. 系统技术研究:http://blog.yufeng.info/
  4. 庄周梦蝶erlang板块:http://www.blogjava.net/killme2008/category/20770.html
  5. 博客园的一位大牛:http://www.cnblogs.com/lulu/category/559387.html
  6. 另外一位:http://wqtn22.iteye.com

Erlang语言简单示例

1. hello,world

创建文件hello.erl,编辑如下:

-module(hello).
-export([start/0]).

start()->
  io:format("hello world~n").

在终端输入erl,进入erlang命令行,运行c(hello),即可调用程序

2. 多个参数情况

参考官网,创建tut2.erl,编辑如下:

-module(tut2).
-export([convert/2]).

convert(M,inch) -> M/2.54;
convert(N,centimenter) -> N*2.54.

3.  调用多个函数

创建tut5.erl,编辑如下:

-module(tut5).
% -exoport([format_temps/1]).
-export([format_temps/1]).
format_temps([]) ->
    ok;
format_temps([City | Rest]) -> print_temp(convert_to_celsius(City)),
                             format_temps(Rest).

convert_to_celsius({Name,{c,Temp}}) -> {Name,{c,Temp}};
convert_to_celsius({Name,{f,Temp}}) -> {Name,{c,(Temp -5)*5/9}}.
print_temp({Name,{c,Temp}}) -> io:format("~-15w ~w c~n",[Name,Temp]).

运行结果如下:

4. map和func的运用

利用func,并基于内建函数进行排序,编辑如下:

-module(tut13).
-export([convert_list_to_c/1]).

convert_to_c({Name,{f,Temp}}) ->
    {Name,{c,trunc((Temp-32)*5)}};
convert_to_c({Name,{c,Temp}}) ->
    {Name,{c,Temp}}.

convert_list_to_c(List) ->
    New_List = lists:map(fun convert_to_c/1,List),
    lists:sort(fun({_,{c,Temp1}},{_,{c,Temp2}}) ->
          Temp1 < Temp2 end,New_List).

6. spawn的简单实用

调用spawn运用erlang的并发,编辑如下:

参考:

  1. http://www.erlang.org/course/concurrent_programming.html#top
  2. http://www.erlang.org/doc/getting_started/conc_prog.html#id67324
  3. http://www.blogjava.net/killme2008/archive/2007/06/14/124355.html
-module(tut14).
-export([start/0,say_something/2]).

say_something(What,0) ->
    done;
say_something(What,Times) ->
    io:format("~p~n",[What]),
    say_something(What,Times - 1).

start() ->
    spawn(tut14,say_something,[hello,3]),
    spawn(tut14,say_something,[goodbye,5])

7.erlang的消息通信,基于!

-module(tut15).
-export([start/0,ping/2,pong/0]).

ping(0,Pong_Pid) ->
    Pong_Pid ! finished,
    io:format("ping finished~n",[]);

ping(N,Pong_Pid) ->
    Pong_Pid!{ping,self()},
    receive
        pong ->
            io:format("Ping recieved pong!~n",[])
    end,
    ping(N-1,Pong_Pid).

pong() ->
    receive
        finished ->
            io:format("Pong finished!~n",[]);
        {ping,Ping_Pid} ->
            io:format("Pong recieved ping!~n",[]),
            Ping_Pid ! pong,
            pong()
    end.

start() ->
    Pong_Pid = spawn(tut15,pong,[]),
    spawn(tut15,ping,[3,Pong_Pid]).

未完,待续!

时间: 2024-08-13 03:38:12

Erlang语言学习入门的相关文章

R语言学习入门

R语言的概念 R是用于统计分析.绘图的语言和操作环境.R语言的编译软件下载:https://www.r-project.org/ R语言环境下载:

go语言学习--入门及环境搭建(更新中)

论坛 http://www.golangtc.com/ 入门教程: http://tour.golangtc.com/ http://www.golang-book.com/ 开发工具配置 sublime: http://www.cnblogs.com/sevenyuan/archive/2013/03/01/2938351.html LiteIDE: http://blog.csdn.net/qiurisuixiang/article/details/8728152 代码 https://go

C语言学习入门 (一) 编译、链接、关键字、数据类型、printf函数

参考链接:http://blog.csdn.net/jjwwmlp456/article/details/41676225 编译文件:cc -c one.c two.c  生成.o目标文件 链接文件:cc one.o two.o     默认生成 a.out 执行文件 指定生成的可执行文件名   cc -o one one.o 连续编译.链接:cc one.c      cc -o one one.c    中间生成的.o文件会被删除,最后生成执行文件 cc one.c two.c   源文件超

C语言学习入门 (二) 语句和运算符

C语言的基本语句跟Java中的差不多 循环语句(do while.while.for) 条件语句(if .if-else.switch) goto语句  (比如在循环外 定义一个标记 Exit:;  在循环内可以 用 goto Exit:跳出循环) [plain] view plaincopyprint? for(int i = 0; i < 5; i++) { if(i==2) goto exit; printf("i=%d\n", i); } exit:; printf(&q

C语言学习入门 (四) 字符串、字符串数组、字符和字符串相关函数

字符串简介 * 在Java中,一个字符串可以用String类型来存储 String s = "MJ"; C语言中没有String这种类型.其实字符串就是字符序列,由多个字符组成,所以在C语言中,我们可以用字符数组来存储字符串. * 字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志'\0'. '\0'是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干.所以采用字符数组存放字符串,赋值时应包含结束标志'\0'. * 字符串&

C语言学习入门

编译文件:cc -c one.c two.c  生成.o目标文件 链接文件:cc one.o two.o     默认生成 a.out 执行文件 指定生成的可执行文件名   cc -o one one.o 连续编译.链接:cc one.c      cc -o one one.c    中间生成的.o文件会被删除,最后生成执行文件 cc one.c two.c   源文件超过一个时,目标.o文件便不会被删除, 以后可以只编译更改的源文件  cc one.o two.o three.c C语言32

C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含

预处理指令 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令), 产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾. 习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 不带参数的宏定义 #define 宏

C语言学习入门 (七) 变量与函数,static和extern关键字

局部变量 1> 定义:在函数内部定义的变量,称为局部变量.形式参数也属于局部变量. 2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它. 全局变量 1> 定义:在所有函数外部定义的变量,称为全局变量. 2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享. 变量的存储类型 C语言根据变量的存储类型(变量存储的位置:1. 运行时堆栈 2.普通内存 3.寄存器)的不同,

C语言学习入门 (八) 结构体和枚举

结构体 它允许内部的元素是不同类型的 结构体的定义 //结构体类型: struct Person { char name[20]; //char *name; int age; float weight; }; //定义一个结构体变量,定义变量时才分配存储空间 structPerson person;    //与类型定义一起使用 struct Student {  //结构体类型与变量同时定义 char *name; int age; } stu; struct {  //省略类型,结构体变量