erlang代码由module组成。每一个Module由一系列attribute和函数定义组成,attribute和function都以.结尾。
模块属性(module attribute)由一个tag和一个value组成:
-Tag(Value).
函数定义由函数头部(function clause)和一系列函数子句(function clause)组成,函数子句由分号分隔,函数子句由一系列表达式(expression)组成,expression由逗号分隔。
函数头部由函数名(是一个atom),函数参数列表(每个参数是一个模式(pattern))以及可选的when子句组成。
只有在pattern中,才能有未bound的变量,变量只能bind一次。变量以大写字母或下划线开头,可以包含字母、数字,下划线或@符号。变量_是匿名变量,以_开头的变量不是匿名变量,但如果没有使用,编译器不会报warning。
pattern在函数头,case,receive,catch以及匹配(=)表达式中才有。
pattern中,可以有字符串前缀:"prefix" ++ Str
++和--是list操作符,用以将两个list相加,或者从第一个list中去掉第一个出现的第二个list
所有语句都是表达式。
try expression catch pattern ->body end
try expression of pattern->body catch pattern->body end
try expression catch pattern->body after body end
list comprehension: [X*2 || X <- [1,2,3]]
guard sequence > guard > guard expression.
guard sequence由以分号分隔的guard组成,guard由以逗号分隔的guard expression组成。guard sequence中的任何一个guard为true,则为true。guard中的所有guard expression为true时,guard为true。