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

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

下面建立一个购物列表~

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.


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



.<<<待续


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值