【Erlang学习总结】Erlang中文版第三章学习总结

1、模块

1>、模块是Erlang中的基本单元,我们写的所有函数都存于模块之中。模块文件常放于 .erl 文件中。

2>、模块编译成功,为 .beam 文件。

 

3>、函数的子句间用分号( ;)分隔,最后一条子句以句点( . )作为结束符。 注:每一个子句都有一个函数头 和 一个函数体。!!!

函数头由函数名和随后以括号括起来的模式组成。

函数体则由一系列表达式组成。(若模式 与 调用参数匹配成功,则执行对应表达式)。

 

4>、模式匹配:从上往下执行代码

函数不能处理模式匹配失败的情形,此时要用

try E

catch Eer

end.

结构来控制异常的输出,然后使用 case/if 来处理异常。

5>、在 -export ([ Name / N ]) 中,表示一个带有 N 个参数的 名为 Name 的函数。N 称为函数的运算目。

 

6>、逗号( ,)用来分隔函数调用、数据构造器、模式中的参数。

句号( . )用来分隔完整的函数、完整的表达式。

分号( ;)用来分隔子句。在 分段的函数定义 、 case语句 、 if语句 、 try...catch语句 、 receive表达式 中会使用分号。

 

7>、[ X ] 就是 [ X | [ ] ] 的缩写。

8>、函数的目,就是它所拥有的参数数量。

9>、在Erlang中,同一个模块的两个 函数,若同名但不同目,那这是两个完全不同的函数,只是名字恰巧一样。(可作为辅助函数,让代码易懂)

 

2、fun函数

1>、高阶函数(匿名函数) 称为fun() 可以用它创建自己的控制抽象。

fun()函数被称为匿名函数,是因为它没有名字。

2>、fun()函数可以拥有任意数量的参数。

格式: 1)、Name(变量) = fun(参数) -> 表达式 end.

这个错误被称为 badarity?

badarity表明在Erlang中找不到由所调用的函数名及其给定的参数数量所表明的函数。

 

3>、除极个别情况外, fun既可以作为函数的参数,也可以作为函数 ( 或者 fun ) 的结果。

 

这些能够返回 fun 或者接受 fun 作为参数的函数,都被称为高阶函数。 高阶函数是函数式语言的灵魂所在,它能使程序脱胎换骨。!!

 

3、以fun 为参数的函数

list是标准库中的一个模块,从中导出的很多函数都是以 fun 作为参数的。

对列表进行批量操作的方法。

1>、lists:map(F,L).

这个函数将 fun F 应用到列表 L 的每一个元素上,并返回一个新的列表。

 

2>、lists:filter(P,L).

它返回一个新列表,新列表由列表 L 中每一个能满足 P(E) 为 true 的元素组成。

 

4、返回 fun 的函数

1>、lists:member(X,L).

如果 X 是列表 L 的成员,那么这个函数返回 true ,反之返回 false 。

eg:MakeTest = fun(L) -> (fun(X) -> lists:member(X,L) end) end.

IsFruit(X) = MakeTest(Fruit).

等效于:

IsFruit = fun(X) -> lists:member(X,IsFruit) end.

apple =:= lists:member(apple,L).

2>、在使用高阶函数时,可以创建自己的新的抽象控制结构。可以将函数作为函数的参数传入,可以编写返回 fun 的函数。

3>、返回 fun 的函数通常都不容易调试,但这种技术可以解决 如:延迟求值、可重入的解析器、解析组合子 等问题。 因为这些问题本身就是返回解析器的函数。

4>、for循环

for(Max, Max, F) -> [F(Max)];

For(I, Max, F) ->[F(I) | for(I+1, Max, F)].

5>、有时创建自己的控制结构可以很大地降低程序的代码量,有时它还能让程序变得更为清晰。

 

5、有 fun 函数,进行简单的列表处理

eg:mylists:map(fun(X)->X*X end,L).

这里将 (fun(X)->X*X end 的结构(结果)作为参数。

 

6、-import() 、 -export() 声明。

 

7、列表解析技术

 

 

8、生成器、过滤器

 

9、算术表达式

 

10、断言

max(X, Y) when X > Y -> X;

max(X, Y) -> Y.

 

11、断言序列

1>、可以是单个断言也可以是一系列用( ;)分号分开的断言集合。

2>、断言也可以是一系列用( ,)逗号分开的断言集合。

3>、合法的断言表达式只是合法 Erlang 表达式的子集,所以要求没有副作用!

 

 

 

 

12、记录 record

1>、记录提供了一种方法把一个名称与元组中的一个元素对应起来。

如:-record(Name,{key1,Value1},{key2,Value2}). key必须是原子。

 

2>、记录只是原来的一个副本,原有记录本身并未改变。

 

3>、如果仅想提取记录之中某个字段的值,那么我们可以使用 ”点语法“ 来获取:

eg: 8> X#todo.text.

"Fix errata in book"

4>、记录是元组的伪装

 

13、case / if 表达式

1>、case

2>、if 在 if 表达式中,至少要有一个结果为 true ,否则就会抛出一个异常。

 

14、以自然顺序创建列表的四大原则

反转一个列表以后要调用函数 lists:reverse().

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值