Erlang顺序编程之二 模块与函数1

模块:模块是Erlang的基本代码单元,保存在扩展名为.erl文件中,而且必须先编译后才能运行模块中的代码,编译后的存储为扩展名为.beam文件中
函数定义:
-module(geometry).
-export([area/1]).
%%面积
area({rectangle,Width,Height})->Width*Height;
area({circle,R})          ->3.14159*R*R;
area({square,Side})          ->Side*Side.
文件第一行为模块声明(模块名必须和该模块主文件名相同),第二行是导出声明,Name/N是指带有N个参数的函数Name,
export的参数是由Name/N项目组成的列表,export中声明的函数可以在函数外调用
函数定义中符号使用:逗号-分隔函数调用|数据结构|和模式中的参数 分号-分隔子句 句号-分隔函数整体|shell中表达式

函数调用:
$ erl
1> c(geometry).
{ok,geometry}
2> geometry:area({rectangle,10,10}).
100
3> geometry:area({circle,2}).
12.56
函数调用时,在模块(geometry.erl)所在目录打开终端,然后输入erl进入shell,c(geometry)命令是编译geometry.erl
文件中代码,返回{ok,geometry}则表示编译成功,第2,3行调用函数,注意,别忘记在函数名添加模块名和冒号

深入:购物系统
-module(shop).
-export([cost/1,total/1]).

cost(oranges) ->5;
cost(newspaper) ->8;
cost(apples) ->2;
cost(pear) ->12;
cost(milk) ->10.

total([]) ->0;
total([{What,N}|H]) ->cost(What)*N+total(H).
shop.erl文件中导出函数包括cost/1和total/1,分别表示计算当前物品单价和输入物品列表总价

1> c(shop).
{ok,shop}
2> shop:cost(oranges).
5
3> shop:total([{oranges,1},{apples,2},{pear,3}]).
45
第2行仅仅是简单的匹配,这里不多说,主要解释第3行函数调用输出
total模式匹配:
第一次匹配What获值oranges,N获值1,H获值[{apples,2},{pear,3}],执行结果为cost(oranges)*1+total(H)
第二次匹配What获值apples,N获值2,H获值[{pear,3}],执行结果为cost(oranges)*1+cost(apples)*2+total(H)
第三次匹配What获值pear,N获值3,H获值[],执行结果为cost(oranges)*1+cost(apples)*2+cost(pear)*3+total(H)
第四次匹配执行结果如下cost(oranges)*1+cost(apples)*2+cost(pear)*3+total([])=5*1+2*2+12*3+0获值45

total函数详解:
total(L)的工作方式是对参数L进行情况分析。分两种情况:L为非空列表或者为空列表,分别对应以下子句
total([Head|Tail]) ->
some_function_of(Head) + total(Tail);
total([]) ->
0.

课后知识补充:
1 shell中输入命令pwd().打印当前工作目录
2 shell中输入命令ls().列出当前工作目录中所有文件名
3 shell中输入命令cd(Dir)修改当前目录至Dir
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值