1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6;

sum(N) when is_integer(N) -> sum_acc(N,0);
sum(_) -> {error, {bad_argument}}. sum_acc(0, Sum) -> Sum;
sum_acc(N, Sum) -> sum_acc(N-1, Sum + N). sum(N, M) when is_integer(N), is_integer(M), M >= N -> sum_acc3(N, M, 0);
sum(_, _) -> {error, {bad_argument}}. sum_acc3(N, N, Sum) -> Sum + N;
sum_acc3(N, M, Sum) -> sum_acc3(N, M-1, Sum+M).

2. creat(3) => [1,2,3];

creat(N) when N > 0 -> creat_acc(N, []);
creat(_) -> {error, {bad_argument}}. creat_acc(0, List) -> List;
creat_acc(N, List) -> creat_acc(N-1, [N | List]).

3. 打印 1~N 的整数

print(N) when is_integer(N), N > 0 -> print_acc(N,0);
print(_) -> {error, {bad_argument}}. print_acc(0,List) -> io:format("Numer:~p~n", [List]);
print_acc(N,List) -> print_acc(N-1,[N|List]).

3-5 列表操作

filter(List, N) when is_list(List) -> filter_acc(List, N, []);
filter(_, N) -> {error, {bad_argument}}. filter_acc([], N, List) -> onelist(List);
filter_acc([H|T], N, List) when H =< N -> filter_acc(T, N, [onelist(List)|H]);
filter_acc([H|T], N, List) when H > N -> filter_acc(T, N, List). onelist([]) -> [];
onelist([H|T]) when is_list(H) -> H ++ onelist(T);
onelist([H|T]) when not is_list(H) -> onelist(H) ++ onelist(T);
onelist(H) -> [H].

erlang 中的 ++ 是很耗性能的,这在erlang 编程指南中有明确指出, 而且onlist 对于头部是复杂列表(非结构良好列表)时什么报错比如
[[[[[[[]|1]|2]|3]|5]|6]|7] ++ [8] 就会报错,++ 号两边列表结构不对等, 下面优化下。

filter(List, N) when is_list(List) -> filter_acc(List, N, []);
filter(_, N) -> {error, {bad_argument}}. filter_acc([], N, List) -> io:format("List : ~p | ~p~n", [List, concat(List)]), concat(List);
filter_acc([H|T], N, List) when H =< N -> filter_acc(T, N, [List|H]);
filter_acc([H|T], N, List) when H > N -> filter_acc(T, N, List). concat([H|[]]) -> [H];
concat([[]|T]) -> [T];
concat([H|T]) -> lists:concat([concat_cc(H) , concat_cc(T)]).
concat_cc(N) when is_list(N) -> concat(N);
concat_cc(N) -> [N].

erlang 编程指南 第三章-顺序编程 课后练习的更多相关文章

  1. [书籍翻译] 《JavaScript并发编程》第三章 使用Promises实现同步

    本文是我翻译<JavaScript Concurrency>书籍的第三章 使用Promises实现同步,该书主要以Promises.Generator.Web workers等技术来讲解J ...

  2. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  3. PADSPCB权威指南-第三章 预处理(部分)(原创)

    PADSPCB权威指南-第三章(部分)豆丁地址:http://www.docin.com/p-707132066.html

  4. Knockout应用开发指南 第三章:绑定语法(3)

    原文:Knockout应用开发指南 第三章:绑定语法(3) 12   value 绑定 目的 value绑定是关联DOM元素的值到view model的属性上.主要是用在表单控件<input&g ...

  5. Knockout应用开发指南 第三章:绑定语法(2)

    原文:Knockout应用开发指南 第三章:绑定语法(2) 7   click 绑定 目的 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用 ...

  6. Knockout应用开发指南 第三章:绑定语法(1)

    原文:Knockout应用开发指南 第三章:绑定语法(1) 第三章所有代码都需要启用KO的ko.applyBindings(viewModel);功能,才能使代码生效,为了节约篇幅,所有例子均省略了此 ...

  7. VSTO开发指南(VB2013版) 第三章 Excel编程

    通过前两章的内容,有了一定的基础,但进入第三章,实例的步骤非常多,并且随着VS版本的升级,部分功能菜单界面发生了很大变化,所以,第三章的案例我将逐步编写! 实例3.1的目标就是给Excel写一个加载宏 ...

  8. 安卓权威编程指南 - 第五章学习笔记(两个Activity)

    学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...

  9. Spring 学习指南 第三章 bean的配置 (未完结)

    第三章 bean 的配置 ​ 在本章中,我们将介绍以下内容: bean 定义的继承: 如何解决 bean 类的构造函数的参数: 如何配置原始类型 (如 int .float 等) .集合类型(如 ja ...

随机推荐

  1. poj1149--PIGS(最大流)

    题意: 有m个猪圈 每个猪圈有不同数量的猪 [0, 1000]有n个顾客 每个顾客需要Bi头猪 有Ai个钥匙 能打开Ai个不同的猪圈顾客按顺序来买猪 只能买他有钥匙的猪 买完之后 这几个猪圈的猪可以相 ...

  2. hdu1839之二分+邻接表+Dijkstra+队列优化

    Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65 ...

  3. 8-18-Exercise

    8-18-小练 A.HDU 1172   猜数字 采用枚举~[赤果果的暴力~] 代码: #include <iostream> #include <cstdio> #inclu ...

  4. 【三支火把】---C语言const用法总结

    C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...

  5. DevExpress GridControl GridView 导出到 Excel 类

    说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...

  6. redis缓存技术

    初学redis缓存技术,如果文章写得不好还请谅解 应用环境:win7 实现环境:cmd,eclipse redis缓存技术的特点就在于高效,因为目前涉及的数据量逐渐增多,在对于数据的存储上面和sql以 ...

  7. PHP基本语法(二)

    [重点,哪些情况我们会将其它类型的值视为bool值的假:]1. 整型的0会视为bool值的假来执行,任何非0的整型都视为真2. 浮点的0.0不论后面有多少个0都视为假0.000000000,后面只要有 ...

  8. Android解析Json速度最快的库:json-smart

    场景描写叙述: 本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度.结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart. And ...

  9. 微信.NET 微信开发 自己主动内容回复 ASP.NET C#代码

    微信开发中,首先遇到的问题就是处理怎样接收和响应用户消息 , 本文将向大家介绍一下方法和关键的代码. 本文使用的接口库是  :https://github.com/chendong152/Weixin ...

  10. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...