- 浏览: 2690381 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB入门教程 -
shliujing:
楼主在不是精通java和php的前提下,请不要妄下结论。
PHP、CakePHP哪凉快哪呆着去 -
安静听歌:
希望可以一给一点点注释
MySQL存储过程之代码块、条件控制、迭代 -
qq287767957:
PHP是全宇宙最强的语言!
PHP、CakePHP哪凉快哪呆着去 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB入门教程
module是Erlang代码的基本单元,我们写的所有function都存储在module里面,module存储在.erl文件里面
module编译成.beam文件后方可运行
在Erlang_HOME建立一个名为.erlang的文件:
这样启动Erlang自带的Windows程序时会自动切换到work目录
funs是匿名方法:
返回funs的方法和可以接受funs作为参数的方法被称为higher-order方法
接受funs作为参数的方法:
返回funs的方法:
Erlang没有for循环,但我们可以自己定义一个:
module用来声明本module名
export用来导出本module的公开方法
import用来导入其它module的公开方法
使用List Comprehension([F(X) || X <- L])来简化编程和增加可读性:
用List Comprehension实现Quicksort:
用List Comprehension实现Pythagorean Triplets:
算数表达式
优先级为1的先执行,然后是2,and so on
可以用括号改变优先级,括号内的先执行
相同优先级的按从左到右执行
Guard是Erlang里的的一种表达式,关键字为when
Guard Sequence是一个或多个Guard,用“;”隔开
G1;G2;...;Gn中至少有一个Guard为true的话则这个Guard Sequence为true
Guard是一个或多个Guard表达式,用“,”隔开
GuardExpr1,GuardExpr2,...,GuardExprN中所有Guard表达式都为true时为true
合法的Guard表达式:
1,The atom true
2,Other constants(terms and bound variables),all evaluate to false
3,Calls to the guard predicates and to the BIFs
4,Term comparisons
5, Arithmetic expressions
6, Boolean expressions
7, Short-circuit boolean expressions
Guard predicates:
Guard true用于在if表达式中catch all:
Guard buit-in functions:
Record用来给Tuple的元素起名字:
Record的filed可以有默认值
Record定义可以在Erlang源代码里或者放在外部.hrl文件里并被Erlang源代码所引入
我们可以在Eshell里使用rr()方法来读取Record定义:
创建和修改Record:
Record是Tuple的伪装:
case表达式:
if表达式:
将一个整数List按奇偶分成两个List:
module编译成.beam文件后方可运行
在Erlang_HOME建立一个名为.erlang的文件:
io:format("consulting .erlang in ~p~n", [element(2, file:get_cwd())]). %% Edit to the directory where you store your code c:cd("C:/Program Files/erl5.6/work"). io:format("Now in:~p~n", [element(2, file:get_cwd())]).
这样启动Erlang自带的Windows程序时会自动切换到work目录
funs是匿名方法:
1> Z = fun(X) -> 2*X end. 2> TempConvert = fun({c, C}) -> {f, 32 + C*9/5}; ({f, F}) -> {c, (F-32)*5/9} end.
返回funs的方法和可以接受funs作为参数的方法被称为higher-order方法
接受funs作为参数的方法:
1> L = [1,2,3,4]. [1,2,3,4] 2> lists:map(Double, L). [2,4,6,8] 3> lists:filter(Even, L). [2,4]
返回funs的方法:
1>Fruit = [apple, pear, orange]. [apple, pear, orange] 2> MakeTest = fun(L) -> (fun(X) -> lists:member(X, L) end) end. #Fun<erl_eval.6.56006484> 3> IsFruit = MakeTest(Fruit). #Fun<erl_eval.6.56006484> 4> IsFruit(pear). true 5> IsFruit(dog). false 6> lists:fitler(IsFruit, [dog, orange, cat, apple, bear]). [orange, apple]
Erlang没有for循环,但我们可以自己定义一个:
for(Max, Max, F) -> [F(Max)]; for(I, Max, F) -> [F(I)|for(I+1, Max, F)]. 1> lib_misc:for(1,10,fun(I) -> I end). [1,2,3,4,5,6,7,8,9,10]
module用来声明本module名
export用来导出本module的公开方法
import用来导入其它module的公开方法
使用List Comprehension([F(X) || X <- L])来简化编程和增加可读性:
1> L = [1,2,3,4,5]. [1,2,3,4,5] 2> lists:map(fun(X) -> 2*X end, L). [2,4,6,8,10] 3>[2*X || X <- L]. [2,4,6,8,10]
用List Comprehension实现Quicksort:
qsort([]) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]).
用List Comprehension实现Pythagorean Triplets:
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 ].
算数表达式
Op Argument Type Priority +X Number 1 -X Number 1 X*Y Number 2 X/Y Number 2 bnot X Integer 2 X div Y Integer 2 X rem Y Integer 2 X band Y Integer 2 X+Y Number 3 X-Y Number 3 X bor Y Integer 3 X bxor Y Integer 3 X bsl N Integer 3 X bsr N Integer 3
优先级为1的先执行,然后是2,and so on
可以用括号改变优先级,括号内的先执行
相同优先级的按从左到右执行
Guard是Erlang里的的一种表达式,关键字为when
max(X, Y) when X > Y -> X; max(X, Y) -> Y.
Guard Sequence是一个或多个Guard,用“;”隔开
G1;G2;...;Gn中至少有一个Guard为true的话则这个Guard Sequence为true
Guard是一个或多个Guard表达式,用“,”隔开
GuardExpr1,GuardExpr2,...,GuardExprN中所有Guard表达式都为true时为true
合法的Guard表达式:
1,The atom true
2,Other constants(terms and bound variables),all evaluate to false
3,Calls to the guard predicates and to the BIFs
4,Term comparisons
5, Arithmetic expressions
6, Boolean expressions
7, Short-circuit boolean expressions
Guard predicates:
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)
Guard true用于在if表达式中catch all:
if Guard -> Expressions; Guard -> Expressions; ... true -> Expressions end
Guard buit-in functions:
abs(X) element(N, X) float(X) hd(X) length(X) node() node(X) round(X) self() size(X) trunc(X) tl(X)
Record用来给Tuple的元素起名字:
-record(todo, {status=reminder, who=joe,text}).
Record的filed可以有默认值
Record定义可以在Erlang源代码里或者放在外部.hrl文件里并被Erlang源代码所引入
我们可以在Eshell里使用rr()方法来读取Record定义:
1> rr("records.hrl"). [todo]
创建和修改Record:
2> X=#todo{}. #todo{status = reminder, who = joe, text = undefined} 3> X1=#todo{status=urgent, text="Fix errata in book"}. #todo{status = urgent, who = joe, text = "Fix errata in book"} 4> X2=X1#todo{status=done}. #todo{status = done, who = joe, text = "Fix errata in book"} 5> #todo{who=W, text=Txt} = X2. #todo{status = done, who = joe, text = "Fix errata in book"} 6> W. joe 7> Txt. "Fix errata in book" 8> X2#todo.text. "Fix errata in book"
Record是Tuple的伪装:
1> X. #todo{status = done, who = joe, text = "Fix errata in book"} 2> rf(todo). ok 3> X. {todo, done, joe, "Fix errata in book"}
case表达式:
case Expression of Pattern1 [when Guard1] -> Expr_seq1; Pattern2 [when Guard2] -> Expr_seq2; ... end
if表达式:
if Guard1 -> Expr_seq1; Guard2 -> Expr_seq2; ... end
将一个整数List按奇偶分成两个List:
odds_and_evens(L) -> odds_and_evens(L, [], []). odds_and_evens([H|T], Odds, Evens) -> case (H rem 2) of 1 -> odds_and_evens(T, [H|Odds], Evens); 0 -> odds_and_evens(T, Odds, [H|Evens]) end; odds_and_evens([], Odds, Evens) -> {lists:reverse(Odds), lists:reverse(Evens)}.
评论
2 楼
linbzh
2011-06-26
请问scala在国内的使用情况怎么样?erlang和scala的性能比较又怎么样?
1 楼
yuyoo_zhao
2010-12-07
这篇完全没有看懂,一开头就是雾水
发表评论
-
ECUG III -- Elrang中国用户组第三次活动
2008-11-06 11:00 2256详情请见: http://ecug.org/ 大家也帮忙宣传 ... -
Erlang内存管理和运行模式笔记
2008-09-25 16:40 5396Erlang进程非常轻量级 进程间通过消息传递进行通讯 进程接 ... -
Erlang:一个通用的网络服务器
2008-09-24 16:50 6156原文: Erlang: A Generalized TCP S ... -
Erlang里的make
2008-09-22 17:38 3750Erlang自带一个make工具 我们看一个例子 目录结构: ... -
介绍Erlang里的Record
2008-09-12 15:52 8596原文: Erlang: An Introduction to ... -
Erlang与ActionScript3采用JSON格式进行Socket通讯
2008-09-02 16:37 6316前提: 需要下载as3corelib来为ActionScrip ... -
Erlang的JSON库
2008-09-02 15:40 9362使用下列JSON库: http://www.lshift.ne ... -
Erlang和ActionScript3的Socket通讯
2008-09-02 13:18 2886server.erl -module(server). ... -
Erlang和Ruby的Socket通讯
2008-09-01 22:12 2323server.erl -module(server). ... -
Erlang实现简单Web服务器
2008-09-01 17:59 5791转贴一个简单的Web服务器: httpd.erl %% h ... -
Mnesia用户手册:五,Mnesia高级特性
2008-09-01 17:27 7060本章描述了构建分布式、容错的Mnesia数据库相关的高级特性: ... -
Mnesia用户手册:四,事务和其他访问上下文
2008-08-29 00:06 6832本章讲述Mnesia事务系统和事务属性,它们让Mnesia成为 ... -
Mnesia用户手册:三,构建Mnesia数据库
2008-08-27 21:46 9246本章详细介绍了设计Mnes ... -
Mnesia用户手册:二,Mnesia快速上手
2008-08-27 14:09 9135本章介绍了Mnesia: 1) ... -
Mnesia用户手册:一,介绍
2008-08-26 15:47 7797Mnesia是一个分布式数据 ... -
OTP Design Principles: Supervisor Behaviour
2008-08-26 00:06 3115Supervisor Behaviour是一个用来实现一个su ... -
gen_event例子:terminal_logger
2008-08-25 16:23 1667定义三个terminal_logger: $$ termina ... -
OTP Design Principles: Gen_Event Behaviour
2008-08-25 16:06 18111,事件处理原则 在OTP里,event manager是一个 ... -
gen_fsm例子:code_lock
2008-08-22 18:35 2146改了一下代码,可以run了: %% code_lock.erl ... -
OTP Design Principles: Gen_Fsm Behaviour
2008-08-22 17:29 18511,有限状态机 FSM,有 ...
相关推荐
3. **分布式系统**:“面对软件错误构建可靠的分布式系统.pdf”强调了Erlang在构建分布式系统时的优势。Erlang提供了一套完整的工具和库,如分布式节点、分布式进程、分布式数据库和分布式故障恢复机制,使得开发者...
本书《Programming Erlang》旨在帮助读者理解和掌握如何使用Erlang编程语言来构建并行世界中的软件。从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种...
Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...
《Programming Erlang》是Joseph Armstrong所著的一本详细介绍Erlang编程语言的书籍。这本书旨在帮助读者理解Erlang的设计哲学、语法特性以及如何利用它来构建高效、容错的并发系统。Erlang是一种静态类型、函数式...
3. 并发模型:Erlang的并发模型基于actor模型,每个进程都有自己的状态,并通过消息进行交互。这种模型有助于实现分布式和容错系统,因为进程之间的通信是异步的,不会因某个进程阻塞而影响整个系统。 4. 热代码...
读书笔记:ErlangOTP设计原则中文文档
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
《Programming Erlang》是由Joe Armstrong编著的一本关于Erlang编程语言的经典著作。这本书深入浅出地介绍了Erlang的各个方面,旨在帮助读者理解和掌握这门强大的并发和分布式计算语言。 Erlang是一种静态类型、...
### 关于《Pragmatic Programming Erlang 第二版》的核心知识点概述 #### 一、书籍基本信息及背景介绍 《Pragmatic Programming Erlang 第二版》由Erlang之父Joe Armstrong撰写,是一本深入浅出地介绍了Erlang语言...
《Programming Erlang second edition》是Joe Armstrong的经典著作,它是Erlang编程语言领域的权威指南,该书第二版于2013年首次发行。书中不仅覆盖了Erlang的核心语言和框架基础知识,还包括了重要的社区项目,例如...
3. **启动和管理RabbitMQ**: 安装完成后,启动RabbitMQ服务并设置它在系统启动时自动启动: ``` sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server ``` 4. **配置RabbitMQ**: ...
otp_win64_24.1.7.exe
Pragmatic Programmer,Pragmatic Programming,Pragmatic Bookshelf and the linking g device are trademarks of The Pragmatic Programmers,LLC. Every precaution was taken in the preparation of this book....
《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF
Concurrency is natural in ...The model of programming that Erlang uses is very similar to how the world works. This makes programming easy. Many programmers have discovered this, as have many companies.