摘自:http://hi.baidu.com/zai215837829/blog/item/2f4fc2c770c882019d163d80.html
1. 自定义的for循环结构:
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I) | for(I+1, Max)].
2. -import(lists, [map/2, sum/1]. 导入lists模块中的map/2和sum/1函数,这样再应用时可以直接写map(...)和sum(...)了。
3. 列表解析: [F(X) || X <- L]。例子:
[ 2*X || X <- L] %% 将列表L的元素*2,生成新的列表。
[{Name, 2*Number} || {Name, Number} <- Buy]
[shop:cost(A)*B || {A, B} <- Buy]
map(F, L) -> [F(X) || X <- L].
4. 列表解析的常见形式:[X || Qualifier1, Qualifier2, ...]
X是一个任意的表达式,每一个限定词可以是一个生成器,也可以是一个过滤器。
生成器: Pattern <- ListExpr, ListExpr必须是一个对列表项求值的表达式。
过滤器: 可以是一个返回true或false的函数,也可以是一个布尔表达式。
其实,生成器的Pattern也可以起到过滤器的作用,如:
[X || {a, X} <- [{a, 1}, {b, 2}, {c, 3}, {a, 4}, hello, "wow"]]. %% 返回值:[1,4]
相当于[X || {A, X} <- [{a, 1}, {b, 2}, {c, 3}, {a, 4}, hello, "wow"], A=:=a].
map18. A++B,是将列表B附加到列表A上生成一个新的列表,但效率不高。
A--B,是从列表A中删除与B中元素相同的所有元素,如果元素X在B中出现K次,则会从A中依次删除K个元素X。
5. 断言(guard)是一种用于强化模式匹配功能的结构。
6. 在函数定义的头部使用断言时,必须以关键字when开头。如:
max(X, Y) when X > Y -> X;
man(X, Y) -> Y.
7. 可以在任何允许使用表达式的地方使用断言,当断言用于表达式时,它要么返回原子true(认为是求值成功),要么返回原子false(求值失败)。
8. 断言序列:
一组用逗号分隔的断言表达式表示的是and关系,即所以的断言为true,整个断言序列才为true。
一组用分号分隔的断言表达式表示的是or关系
9. 断言谓词:
is_atom(X)
is_binary(X)
is_constant(X)
is_float(X)
is_function(X)
is_function(X, N)
is_integer(X)
is_list(X)
is_number(X)
is_pid(X)
is_port(X)
is_reference(X)
is_tuple(X)
is_record(X, Tag)
is_record(X, Tag, N)
10. 断言BIF
abs(X) X的绝对值
element(N, X) 元组X的第N个元素
float(X) 将数字N转换为浮点数
hd(X) 列表X的头部
length(X) 列表X的长度
node() 当前节点
node(X) 进程X的节点
round(X) 将数字X转换为整数(四舍五入)
self() 当前进程的标识符
size(X) X的大小,X为元组或二进制数据
trunc(X) 将数字X转换为整数(截取)
tl(X) 列表X的尾部
11. 尽量在一个列表的头部进行操作,尽量避免用到List++[H]这样的代码,除非List很短。通常要以自然顺序创建列表。规则如下:
(1)总是在列表头部添加元素。
(2)从一个输入列表的头部提取元素,然后把它们加在一个输出列表的头部。输出列表中的结果与输入列表的顺序相反。
(3)如果顺序至关重要,那么调用经过高度优化的函数list:reverse/1。 (这个函数是在erlang虚拟机中实现的,经过了高度的优化)。
(4)避免违反这些原则。
分享到:
相关推荐
erlang程序设计 中文41-80
erlang程序设计 中文81-120 其他的会陆续上传
Erlang是一种高级编程语言,特别为并发、分布式计算和容错设计,广泛应用于网络通信、实时系统和大型分布式计算环境中。最新版的Erlang是23.3.4.3-1.el7.x86_64.rpm,这个版本针对CentOS 7进行了优化。Erlang以其轻...
Erlang程序设计(中文版-完整书签)&Erlang编程指南(中英文版)
erlang-xmerl-22.2-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-xmerl-22.3-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-20.3.8.17-1.el7.centos.x86_64
erlang-sd_notify-1.0-2.el7.x86_64.rpm
erlang-xmerl-23.0.2-2.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-19.3.6.4-1.el
erlang-21.3.8.11-1.el6.x86_64.rpm
https://blog.51cto.com/7794482/2436678 可根据文档进行部署,redis+mysql+mq的插件 rabbitmq 安装时需要该插件
书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...
erlang-21.3.8.15-1.el7.x86_64.rpm
esl-erlang_24.2.1-1_centos_7_amd64.rpm
erlang-21.3.7.1-1.el7.x86_64.rpm rabbitmq基础语言环境。
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
配套rabbitmq-server-3.8.17-1.el8.noarch.rpm
rabbitmq安装前需要安装erlang包,如果没有erlang包,rabbitmp则无法下载成功
对应rabbitmq 3.12.4,亲测可用