Erlang 记录摘要

Summary: Author: 张亚飞 | 阅读时间: 2 minute read | Published: 2015-09-12
Filed under Categories: ErlangTags: Erlang,

Erlang 记录摘要


Erlang Shell

Erlang Shell 命令是 erl .命令以 . 和回车结束. 可以用 ctrl + c 然后选 a 退出 或 执行 halt(). 或 q(). 退出.建议使用 q(). 命令 ,q() 命令会按正确的顺序的关闭系统,halt().命令会强制性的关闭系统,可能会损坏数据库. f() 会让shell释放它所绑定过的所有变量.执行过这个命令后,所有的变量都变成自由变量.

Erlang R15B (erts-5.9) [smp:2:2] [async-threads:0]

Eshell V5.9  (abort with ^G)
1> 1+4.
5
2>

编译运行 Erlang 代码 文件 tut.erl 需要保存到 erl 程序目录.

-module(tut1). 
-export([fac/1]). 

fac(1) -> 
    1; 
fac(N) -> 
    N * fac(N - 1). 

在 erlang shell 里执行下面的代码编译程序.

3> c(tut1). 
{ok,tut1} 

然后执行下面的代码执行

4> tut1:fac(4). 
24 
  • ERLANG 文件加载器搜索路径

    code:get_path() 获得加载器搜索路径列表 code:add_patha(dir) 将新的路径增加到路径列表开头. code:add_pathz(dir) 将新的路径增加到路径列表结尾. code:all_loaded() 获得已加载的模块的列表.

当前目录的问题

3> pwd().
/home/a/s/gamexg/myerl
ok
4> cd("/home/a/s/gamexg/myerl")

erl -pa Dir1 -pa Dir2 -pz Dirz1 -pz Dirz2

上面的命令可以在启动erl时配置文件加载器路径. pa 增加到列表开头,pz 增加到列表结尾.

数据类型

内置函数参考(类型转换): http://www.erlang.org/doc/man/erlang.html#integer_to_list-2

变量

所有的变量以大写字母开头,变量只能执行一次赋值操作,既变量不变.

原子

原子是一串一小写字母开头,后跟数字,下划线(_),@的字符.使用单引号引起来的字符也是原子.erlang 内原子一经创建就不会回收,而默认原子限制为 1048576 个,超过的话erl 就会挂掉.所以创建原子要注意. 原子相关的函数有 atom_to_binary/2 binary_to_atom/1 binary_to_existing_atom/1 atom_to_list/1, list_to_atom/1, list_to_existing_atom/1 等函数.

http://www.erlang.org/doc/man/erlang.html#atom_to_binary-2

元组

将若干个以逗号分割的值用一对花括号括起来就形成了一个元组.元组类似于c语言中的结构.建议元组的第一个元素用一个原子来标明这个元组所代表的含义(C语言中的结构名).

Eshell V5.9  (abort with ^G)
1> P = {point,10,45}.
{point,10,45}
2> {point,X,_} = P.
{point,10,45}
3> X.
10
4> 

记录

-record(Name, {
               key1 = Default1,
               key2 = Default2,
               key3
               }
).

记录名和字段名必须是原子.记录的定义可以包含在源代码里面或.hrl文件里.但是不能用record命令直接在shell里定义,可以用rr命令载入hrl文件.使用rf命令释放记录定义.

1> rr("aaa.hrl").
* [Name]

创建并操纵记录

2>X=#Name{}.
#Name{key1 = Default1,key2 = Default2,key3=undefined}
3>X1=#Name{key1=123,key3=789}.
#Name{key1 = 123,key2 = Default2,key3=789}
4>X2=X1#Name{key2=456}.
#Name{key1 = 123,key2 = 456,key3=789}
5>#Name{key1=AAA}=X2.
#Name{key1 = 123,key2 = 456,key3=789}
6>AAA.
456
7>X2#Name.key1.
123
8>rf(Name).
ok
3>X2.
{name,123,456,789}

记录就是元组,系统内部只有元组,记录只是语法层的快捷方式而已.

列表

列表用来储存数目可变的东西,将若干以逗号分割的值用一对方括号括起来,就形成了一个列表.

1> L = [1,2,3,4,5,6,7,8,9].
* [1,2,3,4,5,6,7,8,9]
2> [X|Y]=L.
* [1,2,3,4,5,6,7,8,9]
3> X.
1
4> Y.
* [2,3,4,5,6,7,8,9]
5> 

参考:http://svn.liancheng.info/cpie-cn/trunk/.build/html/part-i/chapter-3.html

字符串

Erlang 里面的字符串实际上是整数列表.用双引号将一串字符括起来就是一个字符串.shell 打印一串列表值时,只有列表中所有的整数都是可打印字符时才会当做字符串来打印.可以用 $符号来表示字符的整数值,例如,$a 实际上是一个整数,表示字符a.

语法 函数 函数1(参数1, 参数2) when 断言1, 断言2 -> 函数内容1, 函数内容2; 函数1(参数1) when 断言1 - > 函数1内容.

相同函数名不同参数的函数需要写在一起之间用分号分开.不同函数名的函数直接用句号(.)结束.函数内部使用逗号(,)来分割语句.

  • If 语句

    if 条件1 -> 动作1; 条件2 -> 动作 2; 条件 3 -> 动作 3 end

注意:在结尾没有分号(;).条件部分可以存放多个条件,以逗号(,)表示 AND ,以分号(;)表示 OR.

  • Case 语句
-module(tut10). 
-export([convert_length/1]). 
convert_length(Length) -> 
    case Length of 
        {centimeter, X} -> 
            {inch, X / 2.54}; 
        {inch, Y} -> 
            {centimeter, Y * 2.54} 
    end. 
71> c(tut10). 
{ok,tut10} 
72> tut10:convert_length({inch, 6}). 
  • fun 匿名函数
Eshell V5.5.5 (abort with ^G) 1> Z=fun({2,X})->2*X ; 1> ({4,X})->4*X 1> end.
Fun<erl_eval.6.49591080> 2> Z({2,2}). 4 3> Z({4,2}). 8 4>

其他记录

> init:get_arguments().
* [{root,["/usr/local/lib/erlang"]},
 {progname,["erl"]},
 {home,["/data/home/coam"]}]

Comments

Cor-Ethan, the beverage → www.iirii.com