列表概念: 存储数目可变的东西, 类似一维数组.
下面建立一个购物列表~
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.
这里就是所谓的尾递归了~ (终于又点题了)
.<<<待续