`
hideto
  • 浏览: 2690573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Programming Erlang读书笔记5: Advanced SP

阅读更多
所有的BIFs都属于erlang module,如erlang:tuple_to_list()、erlang:time(),但是大部分BIFs都auto-imported了,所以可以直接调用tuple_to_list()、time()
erlang module的所有BIFs列表见:http://www.erlang.org/doc/man/erlang.html

Binary是用来存储大量raw data的数据结构
1> <<5, 10, 20>>.
<<5,10,20>>


操作Binary的BIFs:
@spec list_to_binary(loList) -> binary()
@spec split_binary(Bin, Pos) -> {Bin1, Bin2}
@spec term_to_binary(Term) -> Bin
@spec binary_to_term(Bin) -> Term
@spec size(Bin) -> Int


Bit Syntax:
1> Red = 2.
2
2> Green = 61.
61
3> Blue = 20.
20
4> Mem = <<Red:5, Green:6, Blue:5>>.
<<23,180>>
5> <<R1:5, G1:6, B1:5>> = Mem.
<<23,180>>
6> R1.
2
7> G1.
61
8> B1.
20


预定义Module属性
-module(modname).
-import(Mod, [Name1/Arity1, Name2/Arity2,...]).
-export([Name1/Arity1, Name2/Arity2,...]).
-compile(Options).
-vsn(Version).


用户自定义Module属性
-SomeTag(Value).

SomeTag必须为一个atom,Value必须为literal term
%% attrs.erl
-module(attrs).
-vsn(1234).
-author({joe,armstrong}).
-purpose("example of attributes").
-export([fac/1]).
fac(1) -> 1;
fac(N) -> N * fac(N-1).

1> attrs:module_info(attributes).
[{vsn,[1234]},{author,[{joe,armstrong}]},{purpose,"example of attributes"}]


Boolean Expressions
1> not true.
false.
2> true and flase.
false.
3> true or false.
true
4> true xor false.
true


字符集
Erlang源代码按ISO-8859-1(Latin-1)编码处理
Erlang内部没有字符数据类型,字符串事实上并不存在而是由整数列表来表示
Erlang对Unicode解析有限,因为整数列表有限

注释
Erlang里的代码注释以%开始,为单行注释

epp
在Erlang模块编译之前,Erlang的预处理器epp先处理它
epp会扩展源代码里的macros并插入必要的头文件
可以使用命令cmopile:file(M, ['P'])来编译M.erl并将结果输出到M.P文件里

Escape Sequence
\b                     Backspace                  8
\d                     Delete                     127
\e                     Escape                     27
\f                     Form feed                  12
\n                     New line                   10
\r                     Carriage return            13
\s                     Space                      32
\t                     Tab                        9
\v                     Vertical tab               11
\NNN \NN \N            Octal characters(N is 0..7)
\^a..\^z or \^A..\^Z   Ctrl+A to Ctrl+Z           1 to 26
\'                     Single quote               39
\"                     Double quote               34
\\                     Backslash                  92
\C                     The ASCII code for C       An integer


方法引用
-moduel(x1).
-export([square/1, ...]).
square(X) -> X * X.
double(L) -> lists:map(fun square/1, L).

-module(x2).
double(L) -> lists:map(fun x1:square/1, L).


Include Files
Erlang里被引入的文件的扩展名为.hrl
-include(Filename).
-include_lib("kernel/include/file.hrl").


List加减
1> [1,2,3] ++ [4,5,6].
[1,2,3,4,5,6]
2> [a,b,c,1,d,e,1,x,y,1] -- [1,1].
[a,b,c,d,e,x,y,1]


Macros
-define(Constant, Replacement).
-define(Func(Var1, Var2, .. , Var), Replacement).

当遇到形如?MacroName的表达式时Macros会被epp扩展:
-define(macro1(X, Y), {a, X, Y}).

foo(A) ->
    ?macro1(A+10, b)

上面的foo(A)会被扩展为:
foo(A) ->
    {a, A+10, b}

一些预定义的macros提供当前module的信息:
?FILE 当前文件名
?MODULE 当前module名
?LINE 当前行数


Macros的Control Flow:
-define(Macro).
-undef(Macro).
-ifdef(Macro).
-ifndef(Macro).
-else.
-endif.


Precess dictionary--Erlang里的HashMap
1> erase().
[]
2> put(x, 20).
undefined
3> get(x).
20
4> get().
[{x, 20}]
5> erase(x).
20
6> get(x).
undefined


Short-Circuit Boolean Expression
Expr1 orelse Expr2
Expr1 andalso Expr2


Term Comparisons
X > Y
X < Y
X =< Y
X >= Y
X == Y
X /= Y
X =:= Y
X =/= Y
分享到:
评论

相关推荐

    erlang programming

    5. ** OTP (Open Telecom Platform)**:OTP是Erlang的标准库,包含了一系列的设计原则、库和工具,用于帮助开发者构建高效、可靠和可维护的系统。OTP中的行为(Behaviours)如GenServer、GenEvent和Gen_fsm等,提供...

    erlang-23.2.1-1.el7.x86-64.rpm

    Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...

    Programming Erlang.pdf

    本书《Programming Erlang》旨在帮助读者理解和掌握如何使用Erlang编程语言来构建并行世界中的软件。从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种...

    《Programming Erlang》

    《Programming Erlang》是Joseph Armstrong所著的一本详细介绍Erlang编程语言的书籍。这本书旨在帮助读者理解Erlang的设计哲学、语法特性以及如何利用它来构建高效、容错的并发系统。Erlang是一种静态类型、函数式...

    programming erlang src code

    5. 错误处理和容错:Erlang的设计哲学是“let it crash”,即允许错误发生,然后通过监控和重启来恢复服务。源码中可以看到如何设置监控树,以及当进程失败时如何优雅地重启。 6. BEAM虚拟机:Erlang运行在BEAM虚拟...

    读书笔记:ErlangOTP设计原则中文文档.zip

    读书笔记:ErlangOTP设计原则中文文档

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    Programming Erlang

    《Programming Erlang》是由Joe Armstrong编著的一本关于Erlang编程语言的经典著作。这本书深入浅出地介绍了Erlang的各个方面,旨在帮助读者理解和掌握这门强大的并发和分布式计算语言。 Erlang是一种静态类型、...

    Pragmatic.Programming.Erlang.2nd.Edition

    ### 关于《Pragmatic Programming Erlang 第二版》的核心知识点概述 #### 一、书籍基本信息及背景介绍 《Pragmatic Programming Erlang 第二版》由Erlang之父Joe Armstrong撰写,是一本深入浅出地介绍了Erlang语言...

    Programming Erlang second edition

    《Programming Erlang second edition》是Joe Armstrong的经典著作,它是Erlang编程语言领域的权威指南,该书第二版于2013年首次发行。书中不仅覆盖了Erlang的核心语言和框架基础知识,还包括了重要的社区项目,例如...

    Centos7安装RabbitMQ的文档和安装包(包含erlang安装包).rar

    5. **安全考虑**: 由于guest用户对所有网络都开放,我们通常会创建新的用户并限制其访问权限。例如,创建一个名为`myuser`的用户: ``` sudo rabbitmqctl add_user myuser mypassword sudo rabbitmqctl set_...

    Erlang安装包,版本:otp_win64_24.1.7.exe

    otp_win64_24.1.7.exe

    《Erlang之父:为什么面向对象很糟糕》PDF

    《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF

    programming-erlang-software-for-a-concurrent-world

    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....

    Programming Erlang 2nd.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.

Global site tag (gtag.js) - Google Analytics