erlang学习1

 

q().----退出erlang's console

f().----撤销遍历绑定

pwd().--打印当前目录

cd("f:/sinpo").--进入指定目录

c(geometry).--编译文件

geometry:sum(L).--列表求和

Z = fun(X) -> 2 * X end. --匿名函数

%% erl中实现for循环
for(Max,Max,F) -> [F(Max)];
for(I,Max,F) ->[F(I)|for(I+1,Max,F)].

%%map定义
map(_,[]) -> [];
map(F,[H|T]) -> [F(H)|map(F,T)].

%%断言guard,是强化模式匹配的一种结构

max(X,Y) when X > Y -> X;
max(X,Y) -> Y.

%%列表record
record定义: (record定义在.erl源码或.hrl文件中)
     -record(todo, {status=reminder,who=joe,text}).
rr("records.hrl"). ----console控制台导入.hrl record

X1 = #todo{status=urgent,text = "this is a test!"}. ---record创建及更新赋值

X2 = X1#todo{status = done}. ---创建X1副本,并改变status字段的值为原子:done

#todo{who = W,text = Txt} = X1. ---模式匹配获得record中字段

X1#todo.text ---点语法获得单个字段

rf().---告诉shell,注释掉记录定义(记录就是元组,只不过使命名元组中不同元素的语法简化而已)

%%case表达式(Guard1->为可选断言)

case Expression of
     Pattern1 [when Guard1] -> Expr_seq1;
     Pattern1 [when Guard2] -> Expr_seq2;
     ...
end

例子:filter函数定义

filter(P,[H|T]) ->
    case P(H) of
         true -> [H|filter(P,T)];
         false -> filter(P,T)
    end;
filter(P,[]) ->
    [].

%%if表达式(Guard1->断言必须)
根据断言验证成功与否决定执行分支
if
   Guard1 ->
       Expr_seq1;
   Guard2 ->
       Expr_seq2;
   ...
end

注:通常if表达式的最后一个断言为true,可保证表达式最后一个分支被求值。

posted @ 2011-07-04 14:26  小网虫  阅读(154)  评论(0编辑  收藏  举报