erlang学习笔记1

函数式语言:每个表达式都必须有值。
 
1、Erlang采用不定长的整数来进行整数的算术运算,不用担心运算溢出。
2、所有变量都必须以大写字母开头。
     1)单一赋值,
     2)模式匹配:=表示一个模式匹配操作  Lhs = Rhs
     命令f()会让shell释放它所绑定过的所有变量。
     Erlang内存没有可变状态,也就没有共享内存,更没有锁。
3、浮点数必须含有小数点且小数点后至少有一位十进制数。
4、原子:是一串以小写字母开头,后面数字字母或下划线或邮件符号的字符。
     使用单引号引起来的字符也是原子。
     原子全局有效。
5、元组:(tuple)。将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。
     eg:Person={person, {name, {first, joe}, {last, armstrong}}, {footsize, 42}}.
     使用模式匹配提取这个人的姓。
     {_, {_, {_, Who}, _}, _} = Person.
     Who.
      joe
     ------- _为匿名变量,在同一个范围内可以多次使用。
6、列表:存储数目可变的东西。
     列表的第一个元素称为列表的头(head),剩下的称为列表的尾(tail)。
     [] 为空列表
     [H|T]      使用|将列表的头和尾分隔开来。
7、字符串:严格地讲,Erlang中并没有字符串,字符串实际上就是一个整数列表。用双引号(")将一串字符括起来就是一上字符串。必须使用双引号。
     使用$符号来表示字符的整数值。
 
模块:
     -module().
     -export(..).
     
     函数:
          函数签名:函数名字和参数个数
          fun     :     匿名函数
          函数可以当参数,返回值也可以是函数。
列表解析: ||
     [F(X) || X <- L] 代表“由F(X)组成的列表,其中X是取值于列表L“。
     eg:
          -module(myMath).
-export([qsort/1]).
qsort([])     ->     [];
qsort([Pivot|T])     ->
     qsort([X||X <- T, X<Pivot])
     ++[Pivot]++
     qsort([X||X<-T, X>=Pivot]).
     毕达哥拉斯三元组:
          整数集合{A, B, C},它使得 A平方+B平方=C平方
          pythag(N) ->
     [{A, B, C} ||
          A <- lists:seq(1, N),
          B <- lists:seq(1, N),
          C <- lists:seq(1, N),
          A+B+C =< N,
          A*A + B*B =:= C*C
     ].
     变位词:
          列出一个字符串所有可能的排列。
          perms([]) -> [[]];
          perms(L) -> [[H|T] || H<-L, T<-perms(L--[H])].
     X--Y是列表的分离操作符,它从列表X中分离出元素Y。
 

闭包:
The notation [F(X) || X<-L] means "the list of F(X) where X is taken from the list L."
格式:
[X || Qualifier1, Qualifier2, ...]
     X is an arbitrary expression, and each qualifier is either a generator or a filter;
          Generators are written as Pattern <- ListExpr where ListExpr must be an expression that evaluates to a list terms.
          Filter are either predicates (function that return true or false) or boolean expressions.
 
 
     断言guard:是一种用于强化模式匹配功能的结构。
     max(X, Y) when X>Y -> X;
     max(X, Y) -> Y.
     
     断言序列:     分号;代表或,逗号(,)代表与
 
     记录record:提供一种把一个名称与元组中的一个元素对应起来的方法。
     -record(Name, {
                         %% the nex two keys have default valuse.
                         key1 = Default1,
                         key2 = Default2,
                         ...
                         %% The next line is equivalent to
                         %% key3 = undefined
                         key3,
                         ...
                    }).
     记录只是元组的伪装。
case/if 表达式:
          语法:
          case Expression of 
               Pattern1 [when Guard1] -> Expr_seq1;
               Pattern2 [when Guard2] -> Expr_seq2;
               ...
          end
if 语法: 在if表达式的这些断言中,至少要有一个结果为true,否则就会抛出一个异常。
     if
          Guard1 ->
               Expr_seq1;
          Guard2 ->
               Expr_seq2;
          ...
     end
 
以自然顺序创建列表
 
 
--------------------------------erlang中任何东西都是表达式,表达式都有值。
posted @ 2013-06-18 09:46  郑剑凡  阅读(321)  评论(0编辑  收藏  举报