Programming Erlang读书笔记5: Advanced SP

news/2024/5/19 2:03:41 标签: Erlang, 读书, C, C++, C#
所有的BIFs都属于erlang module,如erlang:tuple_to_list()、erlang:time(),但是大部分BIFs都auto-imported了,所以可以直接调用tuple_to_list()、time()
erlang module的所有BIFs列表见:[url]http://www.erlang.org/doc/man/erlang.html[/url]

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

操作Binary的BIFs:
[code]
@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
[/code]

Bit Syntax:
[code]
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
[/code]

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

用户自定义Module属性
[code]
-SomeTag(Value).
[/code]
SomeTag必须为一个atom,Value必须为literal term
[code]
%% 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"}]
[/code]

Boolean Expressions
[code]
1> not true.
false.
2> true and flase.
false.
3> true or false.
true
4> true xor false.
true
[/code]

字符集
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
[code]
\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
[/code]

方法引用
[code]
-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).
[/code]

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

List加减
[code]
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]
[/code]

Macros
[code]
-define(Constant, Replacement).
-define(Func(Var1, Var2, .. , Var), Replacement).
[/code]
当遇到形如?MacroName的表达式时Macros会被epp扩展:
[code]
-define(macro1(X, Y), {a, X, Y}).

foo(A) ->
?macro1(A+10, b)
[/code]
上面的foo(A)会被扩展为:
[code]
foo(A) ->
{a, A+10, b}
[/code]
一些预定义的macros提供当前module的信息:
[code]
?FILE 当前文件名
?MODULE 当前module名
?LINE 当前行数
[/code]

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

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

Short-Circuit Boolean Expression
[code]
Expr1 orelse Expr2
Expr1 andalso Expr2
[/code]

Term Comparisons
[code]
X > Y
X < Y
X =< Y
X >= Y
X == Y
X /= Y
X =:= Y
X =/= Y
[/code]

http://www.niftyadmin.cn/n/727660.html

相关文章

java中jlog使用_log4j日志管理使用

最近研究了一下log4j日志管理,贴出来&#xff0c;对初学者来说可能有点儿用Log4j日志管理目录1&#xff0e;Log4j简介Log4j由三个重要的组件构成&#xff1a;日志信息的优先级&#xff0c;日志信息的输出目的地&#xff0c;日志信息的输出格式。l 日志信息的优先级从高到低有OF…

员工执行力差,项目经理有什么责任?

执行力对个人而言执行力就是办事能力&#xff1b;对领导而言执行力是管理能力。 老板让员工去买纸。员工就去了&#xff0c;买了箱餐巾纸回来。老板大叫&#xff0c;我要复印纸&#xff0c;你怎么买的餐巾纸。 员工第二天就去买了复印纸回来。老板一看&#xff0c;又叫&#xf…

[VC/MFC]一条语句实现程序运行时隐藏窗口

因为受到经济危机的影响&#xff0c;我在 bokee.com 的博客可能随时出现无法访问的情况&#xff1b;因此将2005年到2006年间在 bokee.com 撰写的博客文章全部迁移到 csdn 博客中来&#xff0c;本文正是其中一篇迁移的文章。 因为最近我的不良网页过滤引擎--上帝之手的开发进入…

Programming Erlang读书笔记6: 编译和运行Erl程序

启动和停止Eshell [code] $ erl1> halt(). [/code]查看/添加代码查找路径 [code] code:get_path(). code:add_patha(Dir). code:add_pathz(Dir).erl -pa Dir1 -pa Dir2 ... -pz DirK1 -pz DirK2 [/code]查看载入的module和查看出错的module [code] code:all_loaded(). code:…

在职场老板最不喜欢这十种人

要做一位称职的员工&#xff0c;“先做人后做事”是起码的职业守则&#xff0c;毕竟要让老板能够感觉到你人品的可靠并且值得他去信任&#xff0c;然后&#xff0c;还得让老板欣赏你的才华。那么&#xff0c;如何做一个让老板欣赏的好部下&#xff0c;让老板和你部门的领导能够…

java 发送带视频的邮件_java 带文件的 邮件发送

带文件上传的简单邮件发送案例,这个案例还得导入mail.jar包,这个可以去百度上download一个.其中要注意的是:①:name-->只是个名字,不要带上什么的,②:smtp的地址:QQ邮箱-->smtp.qq.com163邮箱-->smtp.163.com126邮箱-->smtp.126.comyeah邮箱-->smtp.yeah.net即:…

asp.net网站配置工具,点“安全”选项卡出错

提示的错误信息&#xff1a; 选定的数据存储区出现问题&#xff0c;原因可能是服务器名称或凭据无效&#xff0c;或者权限不足。也可能是未启用角色管理器功能造成的。请单击下面的按钮&#xff0c;以重定向到可以选择新数据存储区的页。 下面的消息可能会有助于诊断问题: 无法…

Programming Erlang读书笔记7: Concurrency

1, Erlang程序由许多进程组成&#xff0c;这些进程可以相互发送消息2&#xff0c;这些消息可能接收并理解也可能不接收不理解&#xff0c;如果你希望消息被接收并理解&#xff0c;你必须等待应答3&#xff0c;进程组可以连在一起&#xff0c;如果一组进程中的一个死掉&#xff…