Erlang Sequential Programming
Modules• 存放在.erl的文件里,需要先编译才能运行
• 代码的基本单元,所有的函数都存在module里
• Bogdan’s Erlang Abstract Machine
• 在erlang shell 中,使用c(module_name).来编译和装载一个module
• 看代码
-module (geometry).
-export ([area/1]).
area({rectangle,Width,Height}) -> Width * Height;
area({circle,Radius}) -> 3.14159 * Radius * Radius.
• 上面代码中,执行area函数,实际上是匹配area各个实现的参数的过程,匹配到了,就执行函数体的内容,然后返回
Funs• 高阶函数,返回函数,或者接受函数为参数的函数
• Double = fun(X) -> 2*X end.
• 246 = Z (123).
•
• [2,4,6,8] = lists:map(Double,[1,2,3,4]).
• lists:map,lists:filter
•
• Fruit = [apple,pear,orange].
• MakeTest = fun(L) -> (fun(X) -> lists:member(X, L) end) end.
• IsFruit = MakeTest(Fruit).
• IsFruit(pear).
• lists:filter(IsFruit, [dog,orange,cat,apple,bear]).
•
• lists 的快速操作方式
• L = [1,2,3,4].
• [2,4,6,8]=[2*X || X <- L ].
• [X || Q1,Q2,Q3...]
• Q1,Q2 是一些表达式,一种是产生内容的,例如 V <- [],另一种是过滤器,返回true/false的表达式
• 计算满足毕达哥拉斯表达式的数字组合
pythag(N) ->
[ {A,B,C} ||
A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A+B+C =< N,
A*A+B*B =:= C*C
].
数学表达式优先级Guards• guard sequence是由一系列的guard组成,用分号(;)分隔,G1;G2;G3 当至少一个为true是就为true
• guard 是由一一些guard表达式组成,用逗号(,)分隔,如Exp1,Exp2,Exp3,当所有表达式为true时,guard为true
• is_atom,is_integer ,is_系列
Record-record(Name, {
%% the next two keys have default values
key1 = Default1,
key2 = Default2,
...
%% The next line is equivalent to
%% key3 = undefined
key3,
...
}).
• record 只能在erl module里使用,不能在shell里使用
• 所有的key必须是 atom
• X1 = #todo{status=urgent,text="adfadfa"}.
• X2 = X1#todo{status=done}. % 拷贝X1,然后将status赋值
• record的值的取得可以通过pattern match来取得,不提
• 另外,如果只需要一个字段的值,可以使用 X2#todo.text. 来获取
• 本质上,record是保存为一个tuple的,在shell里使用rf(todo).来删除shell里todo这个record,这时候,查看X2的值是{todo,gogogo,argan,undefined},第一个是record的名字,后面是按顺序保存的每个字段的值
• 具体使用,例如:
clear_status(#todo{status=S, who=W} = R) when is_record(R,todo) ->
%% Inside this function S and W are bound to the field
%% values in the record
%%
%% R is the *entire* record
R#todo{status=finished}
%% ...
case 和if 表达式case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2;
...
end
if
Guard1 ->
Expr_seq1;
Guard2 ->
Expr_seq2;
...
end
• 总是优先使用系统提供的函数,例如lists:reverse/1
•
分享到:
相关推荐
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
- **Erlang基础**:包括基本语法、数据类型、函数定义、模式匹配、过程和模块等。 - **并发编程**:介绍Erlang的进程、消息传递、同步和通信机制,以及如何利用这些特性实现并发。 - **分布式Erlang**:讲解如何在...
理解函数式编程的核心概念,如不可变数据、高阶函数和模式匹配,是学习Erlang的基础。 2. **过程与并发**:Erlang中的并发是通过轻量级进程(Lightweight Processes, LWP)实现的,每个进程有自己的堆栈和消息队列...
在Erlang Shell中,你可以像使用计算器一样进行简单的算术运算,如`2+5.`,其中`.`是必要的结束符号,表示计算完成。Shell会返回结果`7`,并在下一行显示出新的提示符`2>`。这种即时反馈的特性使得Erlang Shell成为...
**Erlang编程语言简介** Erlang是一种高级并发编程语言,由...通过《erlang中文基础教程.doc》文档和《更多erlang资料下载.txt》文件,你可以获取更多的Erlang学习资料和实践案例,逐步掌握这一强大而独特的编程语言。
### Erlang编程语言基础知识 ...通过以上介绍,我们不仅了解了Erlang的基础概念及其优势,还学习了如何安装配置Erlang环境以及简单的Erlang编程方法。希望这些信息能够帮助初学者快速入门Erlang编程。
Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。
5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息传递为基础的并发模型著名,新版本可能会加强这方面的能力,更好地支持分布式应用程序。 6. **编译器和工具链**:Erlang的编译器和构建工具可能也得到了...
Erlang趣学指南是一本面向初学者的入门书籍,旨在帮助读者从零开始学习Erlang语言的基础知识和编程技巧。 这本书的作者Fred Hébert是一位在一线拥有丰富实战经验的工程师,他通过轻松幽默的文风和清晰的讲解,向...
6. **热升级与无中断服务**:Erlang支持代码热升级,即在不中断运行的情况下更新应用程序代码,这对于保持高可用性和服务连续性至关重要。 7. **并发性能优化**:Erlang的并发性能优化涉及进程数量的控制、消息队列...
Erlang是一种面向并发的、函数式编程语言,由瑞典...这两本书结合阅读,将为初学者提供一个全面的Erlang学习路径,从基础语法到高级并发编程技巧,有助于深入理解Erlang语言及其在构建高并发、分布式系统中的强大能力。
根据提供的文件信息,这份Erlang编程中文学习手册涵盖了Erlang编程语言的基础知识和一些进阶内容,旨在帮助读者从入门到初中级水平的提升。以下是手册中提到的Erlang编程的相关知识点。 首先,手册介绍了Erlang语言...
这个压缩包“Erlang资料大全”显然是为那些想要学习或深入理解Erlang的人准备的,包含中文基础教程和入门代码。 在Erlang的学习过程中,首先我们需要理解其核心概念。Erlang是基于Actor模型的,每个进程(process)...
Erlang有活跃的开源社区和丰富的学习资源,包括书籍、教程、以及大量的开源项目。JavaEye的电子书也是其中的一环,提供了专业的深入分析。 #### 17. 系统设计原则 Erlang遵循“让它失败”原则(Let It Crash),...
【标题】"Erlang 学习笔记1" ..."rw_file"示例就是很好的起点,它将带你了解如何在Erlang中处理文件I/O,这是任何编程语言的基础。随着对Erlang的理解加深,你会发现它在构建高并发、分布式系统方面的强大潜力。
从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种方式,读者可以从零开始学习Erlang,并逐步掌握其核心功能和编程技巧。 ### 7. 特别准备 文件中多次...
4. **面向Actor的编程模型:**本书深入探讨了Erlang独特的面向Actor的编程模型,这种模型能够有效支持高并发环境下的程序设计。 #### 四、来自行业专家的高度评价 - **Alexander Gounares**(前AOL CTO,Bill ...
Erlang是一种高级编程语言,特别为并发、分布式计算和实时系统设计,广泛应用于电信、银行、...安装"otp_win64_18.1.exe"后,开发者就可以利用Erlang的强大学习社区和丰富的开源库来构建高效、稳定和可扩展的应用程序。
《Erlang程序设计》这本书可能是介绍Erlang基础概念和技术的一本入门书籍,涵盖了变量、数据类型、模式匹配、函数、进程、消息传递等核心概念。书中可能会深入讨论如何在Erlang中编写高效的并发程序,以及其独特的...