#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”这个后缀名。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值