列表, 尾递归(循环语言的代替)

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

下面建立一个购物列表~

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.

这里就是所谓的尾递归了~ (终于又点题了)

.<<<待续

,要愈合不能,要忘却不能,要再次拥抱,却鼓不起足够的勇气,

列表, 尾递归(循环语言的代替)

相关文章:

你感兴趣的文章:

标签云: