在shell下学习erlang的语法
1.输入十六进制:
1> 16#f.
15
输入命令需要在末尾加上一个点号,否则会认为没有输入完整。(第一次安装完成,就迫不及待的在命令行下试了,没有成功,慌了。仔细阅读文档才发现输入不完整。)
2.erlang变量名大写:
13> i=9.
** exception error: no match of right hand side value 9
14> I=9.
9
3.erlang变量的单一赋值:
当执行I=9时,值9就被绑定到I上。没绑定之前是一个自由变量,绑定后变量的值将不会再发生改变。
“=”模式匹配操作符。
17> I=5.
** exception error: no match of right hand side value 5
“Erlang 是一个函数式语言,不存在可变状态。 当多核编程来临的时候,采用不可
变状态所带来的好处是难以估量的。 如果你用 C、Java 这样的传统编程语言为多核 CPU 编写程序,就不得不应付共享内存带来的问题。要想不破坏共享内存,就必须在访问时对其加锁。程序还要保证在操纵共享内存时不会崩溃。 而Erlang没有可变状态,也就没有共享内存,更没有锁,这一切都有利于并行化程序的编写。”
“定义一个变量的词法单元就是这个变量的作用域。因此,如果在一个函数语句范围
内使用 X,那么 X 的值就不能―跳出‖语句之外。在同一个函数的不同子句中,彼此之间也不存在全
局或者共享的私有变量。如果 X 出现在许多个不同的函数当中,那么这些 X 的值也都是各自独立
的。”这个在看完函数后再进行验证。
4.浮点数运算:
18> 5/3.
1.6666666666666667
19> 4/2.
2.0
20> 5 div 3.
1
21> 10 rem 3.
1
22> 4 div 2.
2
23> 4 div 2.0.
** exception error: bad argument in an arithmetic expression
in operator div/2
called as 4 div 2.0
24> 4.0 div 2
24> .
** exception error: bad argument in an arithmetic expression
in operator div/2
called as 4.0 div 2
25> 5/3.0.
1.6666666666666667
经过测试,div运算两边必须是整数。rem取余。
5.erlang原子:
原子是一串以小写字母开头,后跟数字字母或下划线(_)或邮件符号(@)的字符,使用单引号引起来的也是原子。
原子的值就是他自身。
做了几个测试:
37> aaa.
aaa
38> 'aaa'.
aaa
39> "aaa".
"aaa"
40> 111.
111
41> '1111'.
'1111'
42> 'a111'.
a111
43> ''.
''
44> '.
44> '
44> .
'.\n'
45> a'111'.
* 1: syntax error before: '111'
45> +.
* 2: syntax error before: '.'
45> '+'.
'+'
46> AAA.
* 1: variable 'AAA' is unbound
47> 'AAA' .
'AAA'
'单引号是个特殊字符,用来区分原子,"双引号是定义字符串,在后面讲。符合定义的,单引号加与没加一样,不符合的(如:大写字母开头或者数字,或者特殊字符),需要加上单引号作为区分。
6.元组:
将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。值可以是数值和原子。
从元组获取值:
48> D = {a,5,b} .
{a,5,b}
49> {a,C,B} = D.
{a,5,b}
50> C.
5
51> B.
b
书上的一个例子:
55> Person={person,{name,{first,joe},{last,armstrong}},{footsize,42}}
55> .
{person,{name,{first,joe},{last,armstrong}},{footsize,42}}
56> {_,{_,{_,Who},_},_}=Person.
{person,{name,{first,joe},{last,armstrong}},{footsize,42}}
57> Who.
joe
58>
注意 在前面的样例中,将_作为占位符,表示那些我们不关心的变量。符号_称为匿名变量,与常规变量不同,在同一个模式中的不同地方,各个_所绑定的值不必相同。
7.erlang列表:
用列表存储可变的东西,将若干个以逗号分割的值用一对方括号括起来,就形成了一个列表。列表的第一个元素称为列表的头(head)。除去头,剩下的东西就称为列表的尾(tail)。
例如,如果有列表[1,2,3,4,5],那么列表的头就是整数 1,它的尾为[2,3,4,5]。注意,列表的头可以是任何东西,但是列表的尾通常还是一个列表。
访问列表的头是一个非常高效的操作,因此,实际上所有的列表处理函数都是从提取列表头开始的,先对头进行处理,然后继续处理列表的尾。
erlang列表定义:如果T 是一个列表,那么[H|T]也是一个列表 ,这个列表以H 为头,以T为尾。竖线符号(|)可以将列表的头和尾分隔开来,而[]则是空列表。
58> H = [1,a,{a,b,c}].
[1,a,{a,b,c}]
59> T = [1,2,3].
[1,2,3]
60> [H|T].
[[1,a,{a,b,c}],1,2,3]
提取列表中的值:
62> [Aa|Bb]=H.
[1,a,{a,b,c}]
63> Aa.
1
64> Bb.
[a,{a,b,c}]
8.erlang字符串:
严格来讲,erlang没有字符串,字符串就是一个整数列表,列表中的每一个值都是字符所对应的整数值。
shell打印一串列表值时,只有列表中的所有整数都是可打印字符,它才把这个列表当作字符串来打印:
66> [3,4,5].
[3,4,5]
67> [83,84,85].
"STU"
68> [3,83,84].
[3,83,84]
69> [$a,$b,$c].
"abc"
我们无须死记硬背哪一个整数表示哪一个特定的字符(ASCII码表),可以使用$符号来表示字符的整数值。例如,$a实际上是一个整数,表示字符 a。
命令f()会让shell释放它所绑定过的所有变量。执行这个命令后,所有的变量都变成自由变量。
72> X=333.
333
73> X=111.
** exception error: no match of right hand side value 111
74> f().
ok
75> X=111.
111
终于将第二章看完了,有种眼前一亮的感觉。
上一篇: Erlang研究研究
下一篇: 网站采集小体会
0 Responses so far.