LYSE-起步

数字

四则运算

1> 2 + 15.
17
2> 49 * 100.
4900
3> 1892 - 1472.
420
4> 5 / 2.
2.5
5> 5 div 2.
2
6> 5 rem 2.
1

进制

10> 2#101010.
42
11> 8#0677.
447
12> 16#AE.
174

变量

值不可改变

首字母必须大写

_或_开头的变量,相当于哑元,可以用来接值,但不会保存数据。

原子

小写字母开头的标识符,或''包含的数据是原子数据。

原子数据放在原子表中,不会被垃圾收集。原子数据增加时,会持续消耗内存直至用尽内存或声明了1048577个原子数据。因此不要动态生成原子数据。

 

关键字不能用作原子数据。

布尔代数与比较符

布尔

1> true and false.
false
2> false or true.
true
3> true xor false.
true
4> not false.
true
5> not (true and true).
false

and/or会对两端表达式求值,要使用短路逻辑,应该使用andalso/orelse。

 

判断相等

6> 5 =:= 5.
true
7> 1 =:= 0.
false
8> 1 =/= 0.
true
9> 5 =:= 5.0.
false
10> 5 == 5.0.
true
11> 5 /= 5.0.
false

 

判断不等

12> 1 < 2.
true
13> 1 < 1.
false
14> 1 >= 1.
true
15> 1 =< 1.
true

 

与C++不同,1与true并不相等,0与false也不相等。

实际上,不同类型有下面的比较关系

number < atom < reference < fun < port < pid < tuple < list < bit string

 

元组

格式:{元素1,元素2,……,元素N}

1> X = 10, Y = 4.
4
2> Point = {X,Y}.
{10,4}
3> Point = {4,5}.
{4,5}
4> {X,Y} = Point.
{4,5}
5> X.
4
6> {X,_} = Point.
{4,5}
7> {_,_} = {4,5}.
{4,5}
8> {_,_} = {4,5,6}.
** exception error: no match of right hand side value {4,5,6}
10> PreciseTemperature = {celsius, 23.213}.
{celsius,23.213}
11> {kelvin, T} = PreciseTemperature.
** exception error: no match of right hand side value {celsius,23.213}
12> {point, {X,Y}}.
{point,{4,5}}

 

列表

格式:[元素1,元素2,……,元素N]

 

列表可以放任意数据

1> [1, 2, 3, {numbers,[4,5,6]}, 5.34, atom].
[1,2,3,{numbers,[4,5,6]},5.34,atom]

如果元素全是可打印的ASCII值,那么显示的结果有点尴尬

2> [97, 98, 99].
"abc"

“并”、“差”操作

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

“并”、“差”操作是右结合的

9> [1,2,3] -- [1,2] -- [3].
[3]
10> [1,2,3] -- [1,2] -- [2].
[2,3]

使用BIFs(内建函数)来获取列表数据

11> hd([1,2,3,4]).
1
12> tl([1,2,3,4]).
[2,3,4]

以上两个函数取数据时,使用这个匹配模式:[头|尾]。

"|"称为构造操作符。

13> List = [2,3,4].
[2,3,4]
14> NewList = [1|List].
[1,2,3,4]
15> [Head|Tail] = NewList.
[1,2,3,4]
16> Head.
1
17> Tail.
[2,3,4]
18> [NewHead|NewTail] = Tail.
[2,3,4]
19> NewHead.
2

 

适当列表&非适当列表

适当列表的最后一个单元是一个空列表。

当以“[2]”这样的形式来声明列表时,列表被构造成一个适当的列表。

而以"[1|2]”方式声明时,将构造一个非适当列表。

非适当列表用来匹配[head|tail]没有问题,但无法用于内建函数。

因此“[1|2]”应声明成“[1|[2]]”。

 

列表推导式

列表推导式格式:列表 = [表达式 || 生成表达式1,生成表达式2,……,生成表达式N,条件1,条件2,……条件M]

生成表达式格式:样式 <- 列表

3> RestaurantMenu = [{steak, 5.99}, {beer, 3.99}, {poutine, 3.50}, {kitten, 20.99}, {water, 0.00}].
[{steak,5.99},
{beer,3.99},
{poutine,3.5},
{kitten,20.99},
{water,0.0}]
4> [{Item, Price*1.07} || {Item, Price} <- RestaurantMenu, Price >= 3, Price =< 10].
[{steak,6.409300000000001},{beer,4.2693},{poutine,3.745}]
5> [X+Y || X <- [1,2], Y <- [2,3]].
[3,4,4,5]

 

位操作

二进制数据放在“<<”和“>>”中间。

二进制数据的格式:

  值

  值:大小

  值/类型声明列表

  值:大小/类型声明列表

类型声明列表包含的元素:

  类型。可选值: integer | float | binary | bytes | bitstring | bits | utf8 | utf16 | utf32

  符号。可选值:signed | unsigned

  端。可选值:big | little | native
  单位。格式:unit:integer

  元素之间用“-”连接

3> Pixels = <<213,45,132,64,76,32,76,0,0,234,32,15>>.
<<213,45,132,64,76,32,76,0,0,234,32,15>>
4> <<Pix1,Pix2,Pix3,Pix4>> = Pixels.
** exception error: no match of right hand side value <<213,45,132,64,76,32,76,
0,0,234,32,15>>
5> <<Pix1:24, Pix2:24, Pix3:24, Pix4:24>> = Pixels.
<<213,45,132,64,76,32,76,0,0,234,32,15>>

只想匹配开头的数据时,可以使用语法糖

8> <<R:8, Rest/binary>> = Pixels.
<<213,45,132,64,76,32,76,0,0,234,32,15>>
9> R.
213

二进制推导式

二进制生成列表

1> [ X || <<X>> <= <<1,2,3,4,5>>, X rem 2 == 0].    
[2,4]

列表生成二进制

4> << <<R:8, G:8, B:8>> ||  {R,G,B} <- RGB >>.
<<213,45,132,64,76,32,76,0,0,234,32,15>>

 

posted on 2015-11-25 15:04  神气小宇  阅读(145)  评论(0编辑  收藏  举报

导航