Erlang练习题----shopping
直接就上代码了:
-module(shop).
-export([cost/1,total/1]). cost(orange) -> 5;
cost(newspaper) -> 8;
cost(apples) -> 2;
cost(pears) -> 9;
cost(milk) -> 7. total([{What, N}|T]) -> cost(What)*N + total(T);
total([]) -> 0.
上面这段代码使用了迭代结构(recursive),但是,这种迭代结构存在问题,如果我们输入的T list太长的话,它会吃掉我们很多很多的内存。怎么办?聪明的先驱们已经想好了解决办法,有种叫tail recursive的方法,如下:
-module(shop).
-export([cost/1,total/1]). cost(orange) -> 5;
cost(newspaper) -> 8;
cost(apples) -> 2;
cost(pears) -> 9;
cost(milk) -> 7. total([{What, N}|T]) -> total([{What, N}|T], 0). total([], Acc) -> Acc;
total([{What, N}|T], Acc) -> total(T, Acc + cost(What)*N).
我们看到这里事实上有两个total函数,而且我们export的是只有一个参数的total函数:第一个只有一个参数,即我们如数的“商品-数量”的list,它是作为一个“伪装”,方便我们调用第二个total;而第二个total,有两个参数,其中一个是list,另一个则是用来暂存迭代值的临时变量。显然,如果使用这种迭代结构,每次迭代我们只需传递并保存两个参数,而不是一个待计算的表达式,这大大的节省了ram。
Erlang练习题----shopping的更多相关文章
- 一个糟糕的Erlang练习题
好吧,用的语法很糟糕...但是至少是做了练习. 题目 %The sequence of triangle numbers is generated by adding the natural numb ...
- [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索. 小站地址: http://site.douban.com/204209/ ...
- Erlang基础 -- 介绍 -- Wordcount示例演示
在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问 ...
- 编写一个函数来找出所有不带歧义的函数名,也就是 那些只在一个模块里出现过的函数名(erlang)
erlang程序设计第八章练习题第二题: code:all_loaded()命令会返回一个由{Mod,File}对构成的列表,内含所有Erlang系统 载入的模块.使用内置函数Mod:module_i ...
- [Erlang 0129] Erlang 杂记 VI
把之前阅读资料的时候记下的东西,整理了一下. Adding special-purpose processor support to the Erlang VM P23 简单介绍了Erlang C ...
- [Erlang 0128] Term sharing in Erlang/OTP 下篇
继续昨天的话题,昨天提到io:format对数据共享的间接影响,如果是下面两种情况恐怕更容易成为"坑", 呃,恰好我都遇到过; 如果是测试代码是下面这样,得到的结果会是怎样?猜! ...
- [Erlang 0127] Term sharing in Erlang/OTP 上篇
之前,在 [Erlang 0126] 我们读过的Erlang论文 提到过下面这篇论文: On Preserving Term Sharing in the Erlang Virtual Machine ...
- [Erlang 0126] 我们读过的Erlang论文
我在Erlang Resources 豆瓣小站上发起了一个征集活动 [链接] ,"[征集] 我们读过的Erlang论文",希望大家来参加.发起这样一个活动的目的是因为Erlang相 ...
- [Erlang 0125] Know a little Erlang opcode
Erlang源代码编译为beam文件,代码要经过一系列的过程(见下面的简图),Core Erlang之前已经简单介绍过了Core Erlang,代码转换为Core Erlang,就容易拨开一些语法糖的 ...
随机推荐
- 浅谈CLR
1.什么是CLR CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步 ...
- 实例化Model的三种方式
- 【转】Bresenham快速画直线算法
一. 算法原理简介: 算法原理的详细描述及部分实现可参考: http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresen ...
- SpringMVC Controller介绍(转)
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- C# lambda表达式及初始化器
using System;using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1d { c ...
- Opencv相关细节
cvGetPerpective 和 cvFindHomography 前者是计算透视映射矩阵,后者是计算单应性矩阵. 当是逆透视的时候,前者可以认为是平面的单应性矩阵. 如上面的图所示: 矩形 ...
- [CareerCup] 5.1 Insert Bits 插入位
5.1 You are given two 32-bit numbers, N and M, and two bit positions, land j. Write a method to inse ...
- iOS - 语音云通讯
iOS SDK 2.0 语音及图片消息详解本文档将详细介绍融云的语音及图片消息接口功能及使用说明.阅读本文前,我们假设您已经阅读了融云 iOS 开发指南,并掌握融云 SDK 的基本用法. 语音消息用来 ...
- Jenkins进阶系列之——10Publish Over SSH插件
说明:这个插件可以通过ssh连接其他Linux机器 官方说明:Publish Over SSH 安装步骤: 系统管理→管理插件→可选插件→Artifact Uploaders→Publish Over ...
- 拥Bootstrap入怀——模态框(modal)篇
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<CSS绘制Android Robot> 作者主页:myvin 博主QQ:851399101(点击QQ和 ...