erlang之旅(1)
语句结束用一个句点和换行。
整数采用不定长的整数,没有误差,也会溢出。
变量名必须是大小字母开头。
变量分自由变量和绑定变量,自由变量可以接受任何值,自由变量接受任何值后就变成绑定变量,绑定变量不能再接受任何值。-----(变量不变)。
=为模式匹配符号,而非一般理解上的赋值符号。
单一赋值有益于编写更高质量的代码。
Erlang没有可变状态,也就没有共享内存,更加没有锁,这一切都有益于并行化程序的编写。
"/"除法永远返回浮点数结果,div返回整数除结果,而rem返回余数。
原子是以小写字母开头,后面跟数字字母或下划线“_”或邮件符号“@”。
原子用来表示不同的非数字常量值。
tuple,元组,是若干个用逗号分隔的值以一对花括弧括起来。
在”=“的模式匹配中,可以使用符号”_“作为占位符,表示那些我们不关心的值,符号“_”称为匿名变量。
list,列表就是将若干个用逗号分隔的值以一对中括弧括起来。列表的第1个元素称为头head,第1个之后的全部元素称为尾tail。
可以使用模式匹配从列表中提取元素。假设有1个非空列表L,那么表达式[X|Y]=L,可以把列表L的头提取到X,列表的尾提取到Y。
在Erlang中没有字符串,字符串实际上是一个整数列表。用双引号“”将一串字符括起来就是字符串。
可以用$符号来表示字符的整数值。
命令f()会释放shell中所有绑定过的变量。f()执行后所有变量就又变回自由变量。
模块是erlang代码的基本单元,编写的所有函数都存于模块中,模块存放在以.erl为扩展名的文件中。.erl文件编译后生产.beam文件。(beam=Bogdan's Erlang Abstract Machine)
1个函数可以由多个子句构成,子句之间用分号分隔,最后1个子句以句点为结束符。每个子句都由1个函数头和1和函数体构成,函数头由函数名和随后的以小括号括起来的模式组成,函数体由一系列表达式组成。
在Erlang的shell中,pwd().查看当前路径,cd("目录"). 更换当前工作目录,c(.erl文件名不带后缀名).编译.erl代码文件为.beam文件。(注意命令最后都有个句点表示结束)
用模块名和函数名精确定位要执行的函数。
在Erlang中会遇到3种标点符号:逗号(,)、句号(.)、分号(;)。
逗号(,):用来分隔函数调用、数据构造器以及模式中的参数。
句号(.):用来在shell中分隔完整的函数和表达式。
分号(;):用来分隔子句,分段的函数定义、case语句、if语句、try...catch语句以及receive表达式。
arity,函数的目就是函数具有的参数数量。在erlang中,如果同一个模块中的2个函数,如果同名但是目不相同,则这2个函数被认为是完全不同的。这2个函数之间除了名字恰巧相同之外,彼此之间再无其他关联。
辅助函数,一般是同名但不同目的函数。
fun就是匿名函数。fun既可以作为函数的参数,也可以作为函数的结果。
erlang是1种函数式的编程语言。
lists,标准库中的一个模块。
lists:map(F,L) 这个函数将fun F应用到列表L中的每一个元素,并返回一个新的列表。
lists:filter(P,L) 这个函数返回一个新列表,新列表由列表L中每一个能满足P(E)为true的元素组成。
像map、filter这样在一个函数调用中处理整个列表的操作称为list-at-a-time操作。
=:= 恒等测试符号。
如果你的模块恰巧使用了系统模块的名称,那么编译时会得到一个奇怪的消息,告诉你不能从保留目录中加载模块,你只需要重新命名,并删掉之前编译生成的beam文件即可。