Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4998736
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Erlang

2018-12-21 16:32:14


第四章 练习题

(2) 内置函数 tuple_to_list(T) 能将元组 T 里的元素转换成一个列表。请编写一个名为
my_tuple_to_list(T) 的函数来做同样的事,但不要使用相同功能的内置函数。

  1. my_tuple_to_list(T) ->
  2.   %% 最优雅的处理方式
  3.   [element(N, T) || N <- lists:seq(1, tuple_size(T))].
(5) 编写一个名为 math_functions.erl 的模块,并导出函数 even/1 和 odd/1 。 even(X) 函数
应当在 X 是偶整数时返回 true ,否则返回 false 。 odd(X) 应当在 X 是奇整数时返回 true 。
(6) 向 math_functions.erl 添加一个名为 filter(F, L) 的高阶函数,它返回 L 里所有符合
条件的元素 X (条件是 F(X) 为 true )。
(7) 向 math_functions.erl 添加一个返回 {Even, Odd} 的 split(L) 函数,其中 Even 是一个
包含 L 里所有偶数的列表, Odd 是一个包含 L 里所有奇数的列表。请用两种不同的方式编写这个函数,一种使用归集器,另一种使用在练习6中编写的 filter 函数。

第五章
(2) 编写一个 map_search_pred(Map, Pred) 函数,让它返回映射组里第一个符合条件的
{Key,Value} 元素(条件是 Pred(Key, Value) 为 true )。

以上练习题都做在在一个文件中, 我也懒得挨个贴了, 贴一个文件都包括了,自己慢慢看吧


math_funcitons.erl


  1. -module(math_functions).
  2. -author("lunay").

  3. %% API
  4. -export([
  5.   even/1,
  6.   odd/1,
  7.   filter/2,
  8.   split/1,
  9.   split2/1,
  10.   map_search_pred/2
  11.   ]).

  12. even(H) ->
  13.   case H rem 2 of
  14.     0 -> true;
  15.     1 -> false
  16.   end.

  17. odd(H) ->
  18.   case H rem 2 of
  19.     1 -> true;
  20.     0 -> false
  21.   end.

  22. filter(F, L) ->
  23.   [X || X <- L, F(X) =:= true].

  24. split(L) ->
  25.   %%使用高阶函数实现
  26.   Odds = filter(fun(X)-> X rem 2 =:= 1 end , L),
  27.   Evens = filter(fun(X)-> X rem 2 =:= 0 end, L),
  28.   {Evens, Odds}.

  29. split2(L) ->
  30.   split(L, [], []).


  31. split([H|T], Even, Odd) ->
  32.   case H rem 2 of
  33.     0 -> split(T, [H|Even], Odd);
  34.     1 -> split(T, Even, [H|Odd])
  35.   end;

  36. split([], Even, Odd) ->
  37.   {Even, Odd}.

  38. %%编写一个 map_search_pred(Map, Pred) 函数,让它返回映射组里第一个符合条件的
  39. %%{Key,Value} 元素(条件是 Pred(Key, Value) 为 true )


  40. map_search_pred(Map, F) ->
  41.   L = maps:to_list(Map),
  42.   map_search_pred_do(L, F, {}).

  43. map_search_pred_do([H|T], F, Res) ->
  44.   case tuple_size(Res) of
  45.     0 -> {X, Y} = H,
  46.          case F(X, Y) of
  47.            true -> map_search_pred_do([], F, {X,Y});
  48.            false -> map_search_pred_do(T, F, Res)
  49.          end;
  50.     _ -> H
  51.   end;

  52. map_search_pred_do([], _, Res) ->
  53.   Res.




阅读(1349) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~