没有合适的资源?快使用搜索试试~ 我知道了~
Erlang基础知识集锦 Erlang基础知识集锦 Erlang基础知识集锦 Erlang基础知识集锦 Erlang基础知识集锦 Erlang基础知识集锦
资源推荐
资源详情
资源评论
Erlang 基础知识集锦
声明:此文档只作为对 erlang 的认知之用,如果需要学习并使用 erlang
请系统学习介绍 erlang 的书。
1. 简介
Erlang 是一个并行编程语言和运行时系统,最初由爱立信(Ericsson)于 1987 年
为电信行业所开发。1998 年爱立信在改良的 MPL(Mozilla Public License)许可
下将 Erlang 发布于开源社区。
Erlang 是:
a) 一种“小众”语言。
b) 一种函数式语言 (变量只能赋值一次)。
c) 一种动态类型语言(变量类型在运行时决定,代码需要编译后才能执行,与
Python,Ruby 等不一样)。
d) 一种强类型语言。
e) 一种面向并发(Concurrency Oriented)的语言。
2. 特性
并发性 - Erlang 支持超大量级的并发线程,并且不需要操作系统具有并发机制。
分布式 - 一个分布式 Erlang 系统是多个 Erlang 节点组成的网络(通常每个处理
器被作为一个节点)。
健壮性 - Erlang 具有多种基本的错误检测能力,它们能够用于构建容错系统。
软实时性- Erlang 支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
热代码升级-Erlang 允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后
被新代码替换。在此过渡期间,新旧代码是共存的。
递增式代码装载-用户能够控制代码如何被装载的细节。
外部接口-Erlang 进程与外部世界之间的通讯使用和在 Erlang 进程之间相同的消
息传送机制。
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 表示不同的非数字常量值。
3.3.2. 示例: Xss = 'Asss'。
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 = [{apple, 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}.
ThingsToBuy2 = [{newspaper,1},{apple,10},{pear,6},{milk,3}].
3.6. 字符串
3.6.1. 在 erlang 中没有字符串,字符串仅仅是整数列表。用双引号将一串字符括
起来就是一个字符串。
3.6.2. 示例:
Name = "Hello".
5>I = $s.
115
8> [I-32, $u, $r, $p, $r, $i, $s, $e].
"Surprise"
4. Erlang 基本语法
4.1. 模块
4.1.1. Erlang 源文件是以.erl 做为扩展名的,头文件是以.hrl 做为扩展名的。
4.1.2. 要运行一个模块,首先要编译它,编译以后的文件是以.beam 做为扩展名的。
文件编译命令:c(Modulename).
4.1.3. 改变 erlang 的工作目录
在 操作系统 用 户 文 件夹下 找 到 目 前登录用 户 的 文 件夹在其 中 建 立 一
个.erlang 文件夹,在这个文件中写上:c:cd("you work dir"). 重启
erlang shell 就改变了工作路径。
4.1.4. 在 erlang 中符号的使用:
逗号(,)用来分隔函数调用,数据构造器(列表元组中的逗号)以及模式中的
参数。
句号(.)(后面跟一个空白符号)用来在 shell 中分隔完整的函数和表达式。
分号(;)用来分隔子句,在以下几种情况下都会用到子句:分段的函数定
义,case 子句, if 语句, try…catch 语句, 以及 receive 表达式。
4.1.5. 调用模块中的方法:Modules:ExportFunc(…)
4.2. 匿名函数(fun 关键字)
4.2.1. 使用示例:
1> Hypot = fun(X, Y) -> math:sqrt(X*X + Y*Y) end.
#Fun<erl_eval.12.113037538>
2> Hypot(3, 4).
5.0
4.2.2. 匿名函数可以作为函数的参数,并且作为函数的返回值。
4.2.3. 定义自己的抽象控制流程:
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I)|for(I+1, Max, F)].
4.3. 简单列表处理
4.3.1. map 函数示例:
map(_, []) -> [];
map(F, [H|T]) ->[F(H)|map(F, T)].
1> L = [1,2,3,4,5].
[1,2,3,4,5]
map(fun(X) -> 2*X end, L).
输出:[2,4,6,8].
4.4. 列表理解
4.4.1. 示例:
1> L = [1,2,3,4].
[1,2,3,4]
2> [2*X || X <- L].
[2,4,6,8]
1> Buy = [{oranges, 4}, {newspaper, 1}, {apples, 10}, {pears, 6}, {milk,
3}].
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
2> [{Name, 2*Number} || {Name, Number} <- Buy].
[{oranges,8},{newspaper,2},{apples,20},{pears,12},{milk,6}]
4.5. 算数表达式(以及优先级)
参见下图:
4.6. Guard
4.6.1. Guard 是一种强化模式匹配功能的结构,使用 Guard 可以在一个模式上做一
些简单的变量测试和比较。
4.6.2. 示例:
max(X, Y) -> when X > Y -> X;
max(X, Y) -> Y.
4.6.3. Guard 组合关系
Guard1;Guard2...;Guardn 条件式中每个条件式是 or 关系。
Guard1,Guard2...,Guardn 条件式中每个条件式是 and 关系。
4.6.4. 合法的 Guard 表达式:
原子 true。
其它常量(字典或者列表中的条目或者绑定变量), 这些在断言表达式
中都会被求值为 false。
表下表一中的这些内建函数。
比较表达式,参见表二。
算数表达式。参见表三。
布尔表达式。
短路布尔表达式
表一:
表二:
表三:
剩余22页未读,继续阅读
资源评论
冷剑魂
- 粉丝: 2
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功