第四章 练习题
(2) 内置函数 tuple_to_list(T) 能将元组 T 里的元素转换成一个列表。请编写一个名为
my_tuple_to_list(T) 的函数来做同样的事,但不要使用相同功能的内置函数。
-
my_tuple_to_list(T) ->
-
%% 最优雅的处理方式
-
[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
-
-module(math_functions).
-
-author("lunay").
-
-
%% API
-
-export([
-
even/1,
-
odd/1,
-
filter/2,
-
split/1,
-
split2/1,
-
map_search_pred/2
-
]).
-
-
even(H) ->
-
case H rem 2 of
-
0 -> true;
-
1 -> false
-
end.
-
-
odd(H) ->
-
case H rem 2 of
-
1 -> true;
-
0 -> false
-
end.
-
-
filter(F, L) ->
-
[X || X <- L, F(X) =:= true].
-
-
split(L) ->
-
%%使用高阶函数实现
-
Odds = filter(fun(X)-> X rem 2 =:= 1 end , L),
-
Evens = filter(fun(X)-> X rem 2 =:= 0 end, L),
-
{Evens, Odds}.
-
-
split2(L) ->
-
split(L, [], []).
-
-
-
split([H|T], Even, Odd) ->
-
case H rem 2 of
-
0 -> split(T, [H|Even], Odd);
-
1 -> split(T, Even, [H|Odd])
-
end;
-
-
split([], Even, Odd) ->
-
{Even, Odd}.
-
-
%%编写一个 map_search_pred(Map, Pred) 函数,让它返回映射组里第一个符合条件的
-
%%{Key,Value} 元素(条件是 Pred(Key, Value) 为 true )。
-
-
-
map_search_pred(Map, F) ->
-
L = maps:to_list(Map),
-
map_search_pred_do(L, F, {}).
-
-
map_search_pred_do([H|T], F, Res) ->
-
case tuple_size(Res) of
-
0 -> {X, Y} = H,
-
case F(X, Y) of
-
true -> map_search_pred_do([], F, {X,Y});
-
false -> map_search_pred_do(T, F, Res)
-
end;
-
_ -> H
-
end;
-
-
map_search_pred_do([], _, Res) ->
-
Res.
阅读(1427) | 评论(0) | 转发(0) |