#erlang#学习笔记

一.erlang的模式匹配问题:Lhs=Rhs
Lhs指模式,可以是[X,Y]、{X,Y}或X之类的列表,元组和变量,Rhs为值(不用怎么解释了吧)。在erlang中,若想得到python中"...[...]"列表引索的效果,需要写一个和值相适应的模式,并且在模式中把想求的值使用一个变量代替(和py中的形式参数类似),再匹配值:
例如:
1.现在捆绑一个变量:X = {232,34,"hello"}.
2.接着我们可以定义一个模式:{_,K,Z}.  #模式的结构必须和值相同,如果值是有三个元素的元组,模式就必须是有三个元素(匿名变量或未绑定的变量)的元组,如果元素数不同或模式和值不同类(比如模式是元组,值是列表时),都是错误的。
3.进行匹配:{_,K,Z} = X.
4.匹配后,K的值就是34,Z就是"hello",要注意,"_"单下划线指匿名变量,要省略的值可以通过它表示。


二.列表相关:
1.列表分“头”和“尾”,比如[23,12,34,12]中,我通过[X|Y]这个模式来匹配,“头”就是X,即第一个元素23(不是列表),“尾”是Y,即[23,12,34,12]这个列表,也就是说,“头”就是第一个元素,第一个元素后的都属于“尾”。
2.如果T是一个列表,[H|T]也是一个列表。我们通过“|”来分开头和尾。另外当我们用[...|T]来构造一个列表时,都要保证T是列表,那么这个就是“正规形式“的列表,否则就是”非正规形式”的列表。一般情况下,都应该使列表为正规形式的列表......
3.我们可以通过[E1,E2,...,En|T]这样的形式来更新列表,添加元素。


三.变量,atom,标识:
1.变量必须以大写字母开头,atom相当于C语言中的常量,以小写字母开头,后可加下划线或@,atom的作用域是全局有效的。
2.标识:参考一个模块的代码:geo.erl
%%%geo.erl
-module(geo).
-export([area/1]).


area({rectangle,Width,Height}) -> Width * Height;
area({circle,R}) -> math:pi() * R * R.


注意:rectangle和circle都是标识,可以省略,但是省略了会比较混乱。两个area开头的都是子句,子句中,要不把rectangle和circle两个标识都写出来,要不就全都别写,如果一个子句写了标识,一个没写,就会错误。


四.f()和c():
1.f()是清空变量的捆绑,执行后,所有被绑定的变量都被释放成为自由变量(erlang中变量是一次赋值,不能重复赋值,除非二次赋值之前执行f()).
2.c(somefile)是编译,somefile是要被编译的文件名,不过不包含“.erl”这个后缀名。

你可能感兴趣的:(erlang)