Erlong程序设计(第二版)第二部分 第4章 练习第2、7题

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

-module(my_tuple_to_list).
-export([my/1]).

my(L) -> [element(X, L) || X <- lists:seq(1, tuple_size(L))]. 

解释:lists:seq(1, N)返回一个包含从1N所有整数的列表,element(X, L)返回列表L里的第X个的值,整个是一个列表推导,返回又给列表。


第7题:

math_functions.erl 添加一个返回 {Even, Odd} split(L) 函数,其中 Even 是一个 包含L 里所有偶数的列表, Odd 是一个包含 L 里所有奇数的列表。请用两种不同的方式编写这个函 数,一种使用归集器,另一种使用在练习6 中编写的 filter 函数。

归集器:

-module(math_functions).
-export([split/1,filter/3]).

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

split2([H|L], Even, Odd) -> 
    case (H rem 2) of
        1 -> split2(L--[H], Even, [H|Odd]);
        0 -> split2(L--[H], [H|Even], Odd)
    end;

split2([], Even, Odd) ->
    {lists:reverse(Even), lists:reverse(Odd)}.
 

filter函数:

filter(F, G, L) -> 
    Even = [X || X <- L, F(X) =:= true],
    Odd = [X || X <- L, G(X) =:= true],
    {Even, Odd}.

F = fun(X) -> (X rem 2) =:= 0 end.

G = fun(X) -> (X rem 2) =:= 1 end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值