2008-01-07
Programming Erlang读书笔记5: Advanced SP
关键字: sequential programming
所有的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的数据结构
操作Binary的BIFs:
Bit Syntax:
预定义Module属性
用户自定义Module属性
SomeTag必须为一个atom,Value必须为literal term
Boolean Expressions
字符集
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
方法引用
Include Files
Erlang里被引入的文件的扩展名为.hrl
List加减
Macros
当遇到形如?MacroName的表达式时Macros会被epp扩展:
上面的foo(A)会被扩展为:
一些预定义的macros提供当前module的信息:
Macros的Control Flow:
Precess dictionary--Erlang里的HashMap
Short-Circuit Boolean Expression
Term Comparisons
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
发表评论
- 浏览: 723193 次
- 性别:

- 来自: BJ

- 详细资料
搜索本博客
我的相册
screenshot
共 1 张
共 1 张
最近加入圈子
最新评论
-
Why OO sucks
看成去QQ SUCK 了
-- by xhanxhanxhan -
Rails的富文本编辑器插件 ...
有没有那个像textmate那种语法高亮的富文本编辑器?
-- by zllicho -
翻译www.djangobook.com之 ...
weiertzw 写道 1. >>> from django. ...
-- by chenjihua75 -
PHP、CakePHP哪凉快哪呆 ...
这孩子被java毒害太深。。。跳出java,你会发现外面的世界真的很大。
-- by woodless -
学习svn命令
只会用 apt-get 不是好孩子。
-- by smartly






评论排行榜