Erlang顺序型编程进阶

Erlang基础教程
本文介绍了Erlang语言的基础知识,包括内置函数的使用、二进制数据操作、布尔表达式及列表操作等内容,并通过实例展示了如何进行二进制数据处理、时间获取等常见任务。

BIF (内建函数)

% 元组转换成列表
1> tuple_to_list({12,cat,"hellp"}).
[12,cat,"hellp"]
% 返回当前时分秒
2> time().
{17,55,23}

二进制数据

1> <<5,10,20>>.
<<5,10,20>>
2> <<"hello">>.
<<"hello">>
3> <<99,97,116>>.
<<"cat">>

操纵二进制数据的 BIF

1> Bin1 = <<1,2,3>>.
<<1,2,3>>
2> Bin2 = <<4,5>>.
<<4,5>>
3> Bin3 = <<6>>.
<<6>>
4> list_to_binary([Bin1,1,[2,3,Bin2],4|Bin3]).
<<1,2,3,1,2,3,4,5,4,6>>
5> split_binary(<<1,2,3,4,5,6,7,8,9,10>>,3).
{<<1,2,3>>,<<4,5,6,7,8,9,10>>}
6> B = term_to_binary({binaries,"are",useful}).
<<131,104,3,100,0,8,98,105,110,97,114,105,101,115,107,0,3,
  97,114,101,100,0,6,117,115,101,102,117,108>>
7> binary_to_term(B).
{binaries,"are",useful}
8> size(<<1,2,3,4,5>>).
5

比特语法

将 X, Y, Z 封装在一个 16 bit 字长的内存区域 , X 占 3bit , Y 占 7bit , Z 占 6bit

1> X = 2.
2
2> Y = 61.
61
3> Z = 20.
20
4> M = <<X:3, Y:7, Z:6>>.
<<"OT">>
5> <<X1:3, Y1:7, Z1:6>> = M.
<<"OT">>
6> X1.
2
7> Y1.
61
8> Z1.
20

小问题集锦

apply , 将模块中的函数应用到参数上面去 :

1> apply(erlang, atom_to_list, [hello]).
"hello"

属性 :

-module(modname).   % 模块声明
-import(lists, [map/2]).   % 从别的模块导入函数
-export([a/2, b/1]).   % 导出函数
-compile(Options).   % 添加编译选项
-vsn(Version).   % 指定模块版本

块表达式 :

begin
    Expr1,
    ...,
    Expr2
end

布尔类型 :

1> true.
true
2> false.
false

布尔表达式 :

not B1.
B1 and B2.
B1 or B2.
B1 xor B2.

短路布尔表达式 :

Expr1 orelse Expr2.
% 先求表达式 Expr1 , 如果 Expr1 为 true , 则不会求 Expr2 的值 (即被短路了) ; 如果 Expr1 为 false , 则会对 Expr2 求值
Expr1 andalso Expr2.
% 先对 Expr1 求值 , 如果为 true , 那么 必须对 Expr2 求值 ; 如果 Expr1 为 false , 则不对 Expr2 求值

包含文件 :

-include(Filename).
-include(Libname).

列表操作符 ++--

1> [1,2,3] ++ [4,5,6].
[1,2,3,4,5,6]
2> [1,2,3] -- [1].
[2,3]
3> [1,1,2,3] -- [1].
[1,2,3]
4> [1,1,2,3] -- [1,1].
[2,3]

宏 :

%% m1.erl
-module(m1).
-export([start/0]).
-ifdef(debug).
-define(TRACE(X), io:format("TRACE ~p:~p ~p~n",[?MODULE, ?LINE, X])).
-else.
-define(TRACE(X), void).
-endif.
start() ->  loop(5).
loop(0) -> 
    void;
loop(N) ->
    ?TRACE(N),
    loop(N-1).

%% cmd
1> c(m1,{d,debug}).
{ok,m1}
2> m1:start(). 
TRACE m1:15 5
TRACE m1:15 4
TRACE m1:15 3
TRACE m1:15 2
TRACE m1:15 1
void

数值类型 :

整型 :

% 2 进制数
1> 2#00101010.
42
% 16 进制数
2> 16#af6bfa23.
2943089187
3> 13.
13
4> -18.
-18

浮点型 :

1> 1.0.
1.0
2> 3.1415926.
3.1415926
3> -2.3e+6.
-2.3e6
4> 23.56E-27.
2.356e-26

进程字典 :

1> erase().
[]
2> put(x,20).
undefined
3> get(x).
20
4> get(y).
undefined
5> put(y,40).
undefined
6> get(y).
40
7> get().
[{x,20},{y,40}]
8> erase(x).
20
9> get().
[{y,40}]

作者 Github : tojohnonly , 博客 : EnskDeCode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值