1.变量与数据类型:
<1>每一条表达式都必须以一个句号后接一个空白字符结尾。(形如:12*13. )
<2>erlang是一种函数式语言,一旦定义了x=123,那么x永远是123,不允许改变。(即erlang中不能重新绑定变量)
<3>变量和原子:
i.erlang的变量以大写字母开头,如X、A_long_name等
ii.以小写字母开头的名称不是变量,而是符号变量,称为原子。(x=123是错误的,x应该大写)
<4>erlang中每个文件就是一个模块
<5>erlang的注释都是以%开头的
2.数据类型
<1>常量:以小写字符开头,如charis、inch等,常量仅仅只是一个名字,不像变量一样带有自身的值。
<2>元组:元组用"{}"来表示,元组可以包含任何合法的erlang内容。
<3>列表:列表用"[]"表示,(注:erlang允许在非敏感的地方换行)可以是用"|"来分离列表中的元素。如"[E1,E2,E3,....,Em|Er]=[1,2,3,....,n]."代表"E1,E2,E3,....,Em"分别对应列表中的前m个元素,"Er"代表列表中剩下的元素。如果想获取超出表中的元素,则会发生错误,但是有一个特殊情况,就是获取一个空列表
1> [A,B,C,D|E]=[1,2,3,4,5,6,7,8].
[1,2,3,4,5,6,7,8]
2> A.
1
3> E.
[5,6,7,8]
4> [R1,R2,R3|R4]=[1,2].
** exception error: no match of right hand side value [1,2]
5> [T1,T2|T3]=[1,2].
[1,2]
6> T3.
[]
3.控制语句
<1>if语句
格式”
if
Condition 1->
Action1;
Condition 2->
Action2;
Condition 3->
Action3
end.
”
注意:end前面的最后一个条件是没有”;”的。
<2>case语句
格式”
case — of
Condition1->
Action1;
Condition2->
Action2;
Condition3->
Action3
end;
”
注意:end前面的最后一个条件是没有”;”的。
4. 进程、模块和编译
erlang程序是由许多并行的进程构成的。进程负责执行模块里定义的函数。模块则是扩展名为.erl的文件,运行必须先编译它们。编译某个模块之后,就可以执行该模块中的函数了。
5.书写并运行”Hello,World”
用文本编辑器编写一个hello.erl文件,内容如下:
-module(hello).告诉我们模块的名字为hello,模块名必须与保存这段代码的文件名相同。
-export([start/0]).告诉我们模块中有一个start函数可以被外部调用,该函数的参数有0个。假如该模块有两个函数face和mult,参数分别有1个和2个,则写成:-export([fac/1,mult/2]).
start()->
io:format("Hello,World~n").
<1>在erlang shell里编译并运行:
从保存hello.erl的目录里启动erlang shell,并执行下面操作:
1> c(hello).
{ok,hello}
2> hello:start().
Hello,World
ok
3> halt().
讲解:c(hello) 命令是编译hello.erl文件,{ok,hello}代表编译成功,hello:start()代表执行模块里的函数,halt()停止了erlang shell。
<2>在erlang shell外编译
在操作系统的命令行里编译和运行前一个例子中的代码:
charies:Desktop weichuang$ erlc hello.erl
charies:Desktop weichuang$ erl -noshell -s hello start -s init stop
Hello,World
charies:Desktop weichuang$
讲解:erlc从命令行启动了erlang编译器。编译器编译了hello.erl里的代码Bing生成一个名为hello.beam的目标代码文件。al -noshell -s 命令加载了hello模块并执行hello:start()函数。