erlang基础知识集锦

上传人:re****.1 文档编号:507944679 上传时间:2023-08-03 格式:DOCX 页数:23 大小:337.85KB
返回 下载 相关 举报
erlang基础知识集锦_第1页
第1页 / 共23页
erlang基础知识集锦_第2页
第2页 / 共23页
erlang基础知识集锦_第3页
第3页 / 共23页
erlang基础知识集锦_第4页
第4页 / 共23页
erlang基础知识集锦_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《erlang基础知识集锦》由会员分享,可在线阅读,更多相关《erlang基础知识集锦(23页珍藏版)》请在金锄头文库上搜索。

1、Erlang基础知识集锦声明:此文档只作为对erlang的认知之用,如果需要学习并使用erlang请系统学习介绍erlang的书。1. 简介l Erlang是一个并行编程语言和运行时系统,最初由爱立信(Ericsson)于1987年为电信行业所开发。1998年爱立信在改良的MPL(Mozilla Public License)许可下将Erlang发布于开源社区。l Erlang是:a) 一种“小众”语言。b) 一种函数式语言 (变量只能赋值一次)。c) 一种动态类型语言(变量类型在运行时决定,代码需要编译后才能执行,与Python,Ruby等不一样)。d) 一种强类型语言。e) 一种面向并发(

2、Concurrency Oriented)的语言。2. 特性l 并发性 - Erlang支持超大量级的并发线程,并且不需要操作系统具有并发机制。l 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)。l 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。l 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。l 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。l 递增式代码装载-用户能够控制代码如何被装载的细节。l

3、 外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。3. 数据类型1.2.3.3.1. 变量3.1.1. 在erlang中的变量只能被赋值一次,变量第一个字母要是大写的。3.1.2. 符号”=”是值类型匹配操作(带有赋值的意思)。(pattern matching)3.1.3. 在erlang中变量是不可变的,也没有共享内存的概念,也没有锁。3.2. 浮点数3.2.1. 整数除法示例: 4 div 2。3.2.2. 求余示例: 5 rem 2。3.2.3. “/”永远返回浮点数。3.3. Atoms(原子)3.3.1. Atoms表示不同的非数字常量

4、值。3.3.2. 示例: Xss = Asss。 1.2.3.4. 元组3.4.1. 将若干个以逗号分隔的值用一对大括号括起来就形成了一个元组。3.4.2. 元组示例: Person = person, name, joe, height, 1.83, footsize, 42.3.4.3. 从元组中提取数据:Point = point, 10, 45.point, X, Y = Point.( pattern match)此后X=10, Y=45.3.5. 列表3.5.1. 将若干个以逗号分隔的值用一对方括号括起来,就形成了一个列表。3.5.2. 示例: ThingsToBuy = appl

5、e, 10, pear, 6, milk, 3.3.5.3. 列表中的第一个元素叫做列表头,剩下的部分叫做列表尾。一般来说列表头可以是任何东西,列表尾经常是一个列表。3.5.4. 访问列表头元素是一个非常高效的操作。3.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.ThingsToBuy

6、2 = newspaper,1,apple,10,pear,6,milk,3.3.6. 字符串3.6.1. 在erlang中没有字符串,字符串仅仅是整数列表。用双引号将一串字符括起来就是一个字符串。3.6.2. 示例: Name = Hello.5I = $s.1158 I-32, $u, $r, $p, $r, $i, $s, $e.Surprise4. Erlang基本语法4.4.1. 模块3.4.4.1.4.1.1. Erlang源文件是以.erl做为扩展名的,头文件是以.hrl做为扩展名的。4.1.2. 要运行一个模块,首先要编译它,编译以后的文件是以.beam做为扩展名的。文件编译命

7、令:c(Modulename).4.1.3. 改变erlang的工作目录在操作系统用户文件夹下找到目前登录用户的文件夹在其中建立一个.erlang文件夹,在这个文件中写上:c:cd(you work dir). 重启erlang shell就改变了工作路径。4.1.4. 在erlang中符号的使用:逗号(,)用来分隔函数调用,数据构造器(列表元组中的逗号)以及模式中的参数。句号(.)(后面跟一个空白符号)用来在shell中分隔完整的函数和表达式。分号(;)用来分隔子句,在以下几种情况下都会用到子句:分段的函数定义,case子句, if语句, trycatch语句, 以及receive表达式。4

8、.1.5. 调用模块中的方法:Modules:ExportFunc()4.2. 匿名函数(fun关键字)4.2.4.2.1. 使用示例:1 Hypot = fun(X, Y) - math:sqrt(X*X + Y*Y) end.#Fun2 Hypot(3, 4).5.04.2.2. 匿名函数可以作为函数的参数,并且作为函数的返回值。4.2.3. 定义自己的抽象控制流程:for(Max, Max, F) - F(Max);for(I, Max, F) - F(I)|for(I+1, Max, F).4.3. 简单列表处理1.2.3.4.4.1.4.2.4.3.4.3.4.3.1. map函数示

9、例:map(_, ) - ;map(F, H|T) -F(H)|map(F, T).1 L = 1,2,3,4,5.1,2,3,4,5map(fun(X) - 2*X end, L).输出:2,4,6,8.4.4. 列表理解4.4.4.4.1. 示例:1 L = 1,2,3,4.1,2,3,42 2*X | X Buy = oranges, 4, newspaper, 1, apples, 10, pears, 6, milk, 3.oranges,4,newspaper,1,apples,10,pears,6,milk,32 Name, 2*Number | Name, Number whe

10、n X Y - X;max(X, Y) - Y.4.6.3. Guard组合关系l Guard1;Guard2.;Guardn 条件式中每个条件式是or关系。l Guard1,Guard2.,Guardn 条件式中每个条件式是and关系。4.6.4. 合法的Guard表达式:l 原子true。l 其它常量(字典或者列表中的条目或者绑定变量), 这些在断言表达式中都会被求值为false。l 表下表一中的这些内建函数。l 比较表达式,参见表二。l 算数表达式。参见表三。l 布尔表达式。l 短路布尔表达式表一:表二:表三:4.6.5. Guard例子f(X, Y) when is_integer(X

11、), X Y, Y .4.6.6. true Guard的使用:true Guard可以在if表达式的末尾处理所有为被匹配的Guard。if Guard - Expression1; Guard2 - Expression2; True - Expressionsend4.7. 记录(Records)4.7.4.7.1. 使用场景当元组的元素数量比较大的时候我们可能不知道某个【元素】的具体意义,这个时候就可以使用记录。4.7.2. 申明示例:-record(todo, status=reminder,who=joe,text).4.7.3. 在shell中读取recode的方法:rr(Some

12、ErlangHeadFile).4.7.4. 使用示例:1#todo.#todostatus = reminder, who=joe, text = undefined3X1 = #todostatus = urgent, text = Fix errata in book.#todostatus = urgent, who = joe, text = Fix errata in book4X2 = X1#todostatus = Done#todostatus = done, who = joe, text = Fix errata in book5#todowho = W, text, T

13、xt = X2.#todostatus = done, who = joe, text = Fix errata in book6W.joe7X2#todo.text.Fix errata in book4.7.5. 在函数中对记录进行模式匹配:clear_status(#todostatus=S, who=W) -R#todostatus=finished4.7.6. 记录只是元组的伪装11X2.#todostatus = done, who = joe, text = Fix errata in book12rf(todo).Ok13X2.todo, done, joe, Fix errata in book4.8. case和if表达式4.8.1. case语句的语法case Expression ofPattern1 when Guard1 - Expr_seq1;、Pattern2 when Guard2 - Expr_seq1;.End4.8.2. case语句示例:filter(P, H|T) -case P(H) oftrue - H|filter(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号