基础知识集锦Word格式文档下载.docx
- 文档编号:13336620
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:29
- 大小:27.22KB
基础知识集锦Word格式文档下载.docx
《基础知识集锦Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基础知识集锦Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
1.1.变量
1.1.1.在erlang中的变量只能被赋值一次,变量第一个字母要是大写的。
1.1.2.符号”=”是值类型匹配操作(带有赋值的意思)。
(patternmatching)
1.1.3.在erlang中变量是不可变的,也没有共享内存的概念,也没有锁。
1.2.浮点数
1.2.1.整数除法示例:
4div2。
1.2.2.求余示例:
5rem2。
1.2.3.“/”永远返回浮点数。
1.3.Atoms(原子)
1.3.1.Atoms表示不同的非数字常量值。
1.3.2.示例:
Xss='
Asss'
。
1.4.元组
1.4.1.将若干个以逗号分隔的值用一对大括号括起来就形成了一个元组。
1.4.2.元组示例:
Person={person,{name,joe},{height,1.83},{footsize,42}}.
1.4.3.从元组中提取数据:
Point={point,10,45}.
{point,X,Y}=Point.(patternmatch)
此后X=10,Y=45.
1.5.列表
1.5.1.将若干个以逗号分隔的值用一对方括号括起来,就形成了一个列表。
1.5.2.示例:
ThingsToBuy=[{apple,10},{pear,6},{milk,3}].
1.5.3.列表中的第一个元素叫做列表头,剩下的部分叫做列表尾。
一般来说列表头可以是任何东西,列表尾经常是一个列表。
1.5.4.访问列表头元素是一个非常高效的操作。
1.5.5.从列表中解析元素:
ThingsToBuy1=[{oranges,4},{newspaper,1}|ThingsToBuy].
[Buy1|ThingsToBuy2]=ThingsToBuy1.
此后:
ThingsToBuy1=[{oranges,4},{newspaper,1},{apple,10},{pear,6},{milk,3}].
Buy1={oranges,4}.
ThingsToBuy2=[{newspaper,1},{apple,10},{pear,6},{milk,3}].
1.6.字符串
1.6.1.在erlang中没有字符串,字符串仅仅是整数列表。
用双引号将一串字符括起来就是一个字符串。
1.6.2.示例:
Name="
Hello"
.
5>
I=$s.
115
8>
[I-32,$u,$r,$p,$r,$i,$s,$e].
"
Surprise"
4.Erlang基本语法
1.7.模块
1.1.1.Erlang源文件是以.erl做为扩展名的,头文件是以.hrl做为扩展名的。
1.1.2.要运行一个模块,首先要编译它,编译以后的文件是以.beam做为扩展名的。
文件编译命令:
c(Modulename).
1.1.3.改变erlang的工作目录
在操作系统用户文件夹下找到目前登录用户的文件夹在其中建立一个.erlang文件夹,在这个文件中写上:
c:
cd("youworkdir").重启erlangshell就改变了工作路径。
1.1.4.在erlang中符号的使用:
逗号(,)用来分隔函数调用,数据构造器(列表元组中的逗号)以及模式中的参数。
句号(.)(后面跟一个空白符号)用来在shell中分隔完整的函数和表达式。
分号(;
)用来分隔子句,在以下几种情况下都会用到子句:
分段的函数定义,case子句,if语句,try…catch语句,以及receive表达式。
1.1.5.调用模块中的方法:
Modules:
ExportFunc(…)
1.8.匿名函数(fun关键字)
1.1.6.使用示例:
1>
Hypot=fun(X,Y)->
math:
sqrt(X*X+Y*Y)end.
#Fun<
erl_eval.12.113037538>
2>
Hypot(3,4).
5.0
1.1.7.匿名函数可以作为函数的参数,并且作为函数的返回值。
1.1.8.定义自己的抽象控制流程:
for(Max,Max,F)->
[F(Max)];
for(I,Max,F)->
[F(I)|for(I+1,Max,F)].
1.9.简单列表处理
1.1.9.map函数示例:
map(_,[])->
[];
map(F,[H|T])->
[F(H)|map(F,T)].
L=[1,2,3,4,5].
[1,2,3,4,5]
map(fun(X)->
2*Xend,L).
输出:
[2,4,6,8].
1.10.列表理解
1.1.10.示例:
L=[1,2,3,4].
[1,2,3,4]
[2*X||X<
-L].
[2,4,6,8]
Buy=[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}].
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
[{Name,2*Number}||{Name,Number}<
-Buy].
[{oranges,8},{newspaper,2},{apples,20},{pears,12},{milk,6}]
1.11.算数表达式(以及优先级)
参见下图:
1.12.Guard
1.1.11.Guard是一种强化模式匹配功能的结构,使用Guard可以在一个模式上做一些简单的变量测试和比较。
1.1.12.示例:
max(X,Y)->
whenX>
Y->
X;
Y.
1.1.13.Guard组合关系
●Guard1;
Guard2...;
Guardn条件式中每个条件式是or关系。
●Guard1,Guard2...,Guardn条件式中每个条件式是and关系。
1.1.14.合法的Guard表达式:
●原子true。
●其它常量(字典或者列表中的条目或者绑定变量),这些在断言表达式中都会被求值为false。
●表下表一中的这些内建函数。
●比较表达式,参见表二。
●算数表达式。
参见表三。
●布尔表达式。
●短路布尔表达式
表一:
表二:
表三:
1.1.15.Guard例子
f(X,Y)whenis_integer(X),X>
Y,Y<
6->
...
1.1.16.trueGuard的使用:
trueGuard可以在if表达式的末尾处理所有为被匹配的Guard。
if
Guard->
Expression1;
Guard2->
Expression2;
…
True->
Expressions
end
1.13.记录(Records)
1.1.17.使用场景
当元组的元素数量比较大的时候我们可能不知道某个【元素】的具体意义,这个时候就可以使用记录。
1.1.18.申明示例:
-record(todo,{status=reminder,who=joe,text}).
1.1.19.在shell中读取recode的方法:
rr(SomeErlangHeadFile).
1.1.20.使用示例:
#todo{}.
#todo{status=reminder,who=joe,text=undefined}
3>
X1=#todo{status=urgent,text="
Fixerratainbook"
}.
#todo{status=urgent,who=joe,text="
}
4>
X2=X1#todo{status=Done}
#todo{status=done,who=joe,text="
#todo{who=W,text,Txt}=X2.
6>
W.
joe
7>
X2#todo.text.
1.1.21.在函数中对记录进行模式匹配:
clear_status(#todo{status=S,who=W})->
R#todo{status=finished}
1.1.22.记录只是元组的伪装
11>
X2.
12>
rf(todo).
Ok
13>
{todo,done,joe,"
1.14.case和if表达式
1.14.1.case语句的语法
caseExpressionof
Pattern1[whenGuard1]->
Expr_seq1;
、
Pattern2[whenGuard2]->
End
1.14.2.case语句示例:
filter(P,[H|T])->
caseP(H)of
true->
[H|filter(P,T)];
false->
filter(P,T)
end;
filter(P,[])->
[].
1.14.3.if语句的语法
if
Guard1->
Expr_seq1;
Guard->
2.erlang中的异常
2.1.erlang异常的产生
异常经常在系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基础知识 集锦