《Erlang 程序设计》练习答案 -- 第四章 模块与函数
2015-11-12 19:37
951 查看
% (1).扩展 geometry.erl 添加一些子句来计算圆和直角三角形的面积。 % 添加一些子句来计算各种几何图形的周长 -module(geometry). -export([area/1]). area({rectangle, Width, Height}) -> Width * Height; area({square, Side}) -> Side * Side; % 计算圆面积 area({round, Radius}) -> 3.1415 * Radius * Radius.
% (2).内置函数 tuple_to_list(T) 能将元组T里的元素转换成一个列表。 % 请编写一个名为 my_tuple_to_list() 的函数来做同样的事。 % 不要使用内置函数 -module(mytupletolist). %-export([my_tuple_to_list/1, my_tuple_to_list/4]). 注意不能这么写 -export([my_tuple_to_list/1]). % T是元组,F是伐值=>0,L是列表 my_tuple_to_list(T) -> my_tuple_to_list(T, tuple_size(T), 0, []). my_tuple_to_list(T, Index, F, L) when Index > F -> my_tuple_to_list(T, Index-1, F, [element(Index, T) | L]); my_tuple_to_list(T, Index, F, L) when Index =:= F -> L.
% (3).查看 erlang:now/0、erlang:data/0 和 erlang:time/0 的定义。 % 编写一个名为 my_time_func(F) 的函数,让它执行 fun F 并记下执行时间。 % 编写一个名为 my_date_string() 的函数,用它把当前的日期和时间改成整齐的格式 -module(mytimefunc). -export([my_time_func/1, my_date_string/0]). my_time_func(F) -> %{MegaSecs1, Secs1, MicroSecs1} = erlang:now(), {Hour1, Minute1, Second1} = erlang:time(), F, %{MegaSecs2, Secs2, MicroSecs2} = erlang:now(), {Hour2, Minute2, Second2} = erlang:time(), io:format("runtime:~f~n", [((Hour2-Hour1)/3600+(Minute2-Minute1)/60+(Second2-Second1))/1000]). my_date_string() -> {Year, Month, Day} = erlang:date(), {Hour, Minute, Second} = erlang:time(), io:format("~p年~p月~p日:~p时~p分~p秒~n", [Year, Month, Day, Hour, Minute, Second]).
% (4).高级练习,查找Python datetime 模块手册页。找出Python的datetime类里有多啊函数哦啊方法 % 可以通过erlang模块里有关时间的内置函数实现。在erlang的手册页里查找等价的函数。 % 如果有明显的遗漏,就实现它。
戳 这里 查看相关模块,也可以在
python shell中输入 import datetime 后,再输入 help(datetime) 查看相关模块。
这个问题就不一一实现了,大家感兴趣可以去看看。
% (5).编写一个名为 math_functions.erl 的模块,并导出函数 even/1 和 odd/1。 % even(X) 函数应当是偶整数时返回 true,否则返回false。odd(X)应当在 X 是奇整数时返回 flase -module(mathfunctions). -export([even/1, odd/1]). even(X) when is_integer(X) -> case (X rem 2 =:= 0) of true -> true; false -> false end. odd(X) when is_integer(X) -> case (X rem 2 =/= 0) of true -> true; false ->false end.
% (6).向 math_functions.erl 添加一个名为 filter(F, L) 的高阶函数, % 它返回 L 里所有符合条件的元素 X (条件是F(X)为true) -module(mathfunctions). -export([filter/2]). filter(F, L) -> [X || X <- L, F(X) =:= true].
% (7).向 math_functions.erl 添加一个返回{Even,Odd}的split(L)函数, % 其中 Even 是一个包含 L 里所有偶数的列表,Odd是一个包含L里所有技术的列表。 % 请用两种不同的方式编写这个函数,一种使用归集器,另一种使用在联系6中编写的filter函数。 -module(mathfunctions). -export([split/1]). %归集器版本,只遍历一遍,但结果是反的 %split(L) -> % split(L, [], []). %split([H|L], Odd, Even) -> % case (H rem 2 =:= 0) of % true -> split(L, Odd, [H|Even]); % false -> split(L, [H|Odd], Even) % end; %split([], Odd, Even) -> % {Even, Odd}. %遍历两遍 split(L) -> Odd = [X || X <- L, (X rem 2) =/= 0], Even = [X || X <- L, (X rem 2) =:= 0], {Even, Odd}.
归集器
列表生成器
相关文章推荐
- JavaEE中文件的下载和文件的上传(--------前后台交互----------)
- PostgreSQL数组使用
- 粗略应用setBoeder,JTree
- 利用easyBCD安装ubuntu双系统常见错误总结
- (Alpha)Let's-版本发布说明
- Android中自定义对话框
- 猫都能学会的Unity3D Shader入门指南(二)
- 深入理解计算机系统(4)
- oc中一些注意的语法
- 使用base64 加密在URL安全传递|url_safe|php
- 压力测试标准
- 原码, 反码和补码详解
- 字典树+AC自动机Hyper Prefix SetsUVA11488YTACM第一周E
- VRRP协议
- NYOJ 115 城市平乱【Dijkstra】
- IOS框架和服务
- 单例模式(Singleton Pattern)
- Qt之qSort
- 杭电-4545魔法串(LCS)
- String,StringBuffer与StringBuilder的区别??