列表概念: 存储数目可变的东西, 类似一维数组.
下面建立一个购物列表~
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.
这里就是所谓的尾递归了~ (终于又点题了)
.<<<待续
,要愈合不能,要忘却不能,要再次拥抱,却鼓不起足够的勇气,