[笔记]erlang中的列表

开始慢慢erlang的学习了,文中所说也许有误,欢迎指正。

 

 

string就是list

在erlang中 string是用list表示的 先开始让我一头雾水。

在erlang shell中:

3> [97,98,99].
"abc"
4>

 得到了这样的结果 编译器试图把转换为string的list都进行了转换

同样的事情在erlang模块的函数中也可以看见

例如:

4> atom_to_list(abc).
"abc"
5> integer_to_list(123).
"123"

 同理直接对string进行模式匹配也是可以的:

6> [97,B,C]="abc".
"abc"
7> B.
98
8> C.
99
9>

那遇到以上情况 要怎么正常显示出list呢 加个0就可以 原因也很简单 0不能转化为任何的字符(有误请指出)被当做非法的 编辑器也就不会转了(其他的只要不会被当成字符的也行):

11> [0|"abc"].
[0,97,98,99]
12> [-1|"abc"].
[-1,97,98,99]
13>

 以上所说对中文之类的也同样适用:

14> [0|"Iteye博客"].
[0,73,116,101,121,101,178,169,191,205]
15> [178,169,191,205].
"博客"

 此外string也完全支持list的++操作

17> "abc"++"d".
"abcd"
18> "abc"++[0].
[97,98,99,0]

 

 

严格list和非严格list

严格的list都是以空列表(nil)[]作为结尾的:

19> [Head|Tail]=[1].
[1]
20> Head.
1
21> Tail.
[]

 当然空表不是以空表结尾的(没有无限递归在里面):

23> [Head|Tail]=[].
** exception error: no match of right hand side value []

 

而不严格的list就是结尾不是以[]结尾的

要构造一个这样的list也是很简单的:

24> [1]++0.
[1|0]
25> [1,2,3|0].
[1,2,3|0]

 然后匹配一下:

28> [Head|Tail]=[1|0].
[1|0]
29> Head.
1
30> Tail.
0

 可以看到已经没有空列表的踪影了

 

 不过这样的非严格列表在实际使用的时候会比较麻烦,一些对列表操作的递归的终止就是空列表

 在一些常用操作中也无法正确处理非严格列表:

 

41> List=[1,2,3,4|0].
[1,2,3,4|0]
42> [X||X<-List].
** exception error: bad generator 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值