您的位置:首页 > 其它

Erlang 学习笔记 (2) -- 列表, 尾递归(循环语言的代替)

2014-05-19 10:04 393 查看

列表概念: 存储数目可变的东西, 类似一维数组.

下面建立一个购物列表~
ThingsToBuy =  [{apple,10}, {pear,6}, {milk,3} ].

列表定义: 如果L是一个列表,  L=[H|T], H (head)为数组第一个元素, T (tail)为其余元素, [ ]为空元素. 

这个定义看起来很啰嗦, 也不知道用来做什么, 看下下面的一个示例大概能明白一点儿:
-module(test).

-export([cost/1]).
-export([total/1]).

cost(apple)	->5;
cost(pear)	->2;
cost(milk)	->3.

total([{What, N}|T]) 	-> cost(What)*N + total(T);
total([])			->	0.
13> test:total([{apple,1},{milk,4},{pear,3}]).23示例就是一个计算购物车总金额的, 
{apple,1},{milk,4}
如 购物车里面有1个苹果, 4瓶牛奶, 3个梨, total 计算总金额,按一般来说, 做个循环就好了,而erlang的世界没有 所谓循环于是乎:total 计算第一个元素(T), 然后 递归计算其余部分total([{What, N}|T]) -> cost(What)*N + total(T);直到,剩余部分为空列表 []total([]) ->0.这里就是所谓的尾递归了~ (终于又点题了).<<<待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: