high佬全 发表于 2015-1-15 00:04:42

lists:foldl的一个比较好的列子

今天遇到了一个比较好的例子,话不多说了,下面开始写我遇到的例子
-record(list,{one = 0, two =0, three= 0,four =0}).
-define(ONE,one).   -define(THREE,three).
-define(TWO,two).    -define(FOUR,four).

add(TypeList,Record_list) ->
Fun= fun({Type,Arg},List) ->
             case Type of
               ?ONE -> List#list{List#list.one+1};
               ?TWO -> List#list{List#list.two+1};
               ?THREE -> List#list{List#list.three+1};
               ? FOUR -> List#list{List#list.four+1}
             end
         end,
lists:foldl(Fun,Record_list,TypeList).

这个函数add的作用是把列表TypeList中的元组一一对应加在
Record_list的记录中,虽然这看似是简单,但是在实际中的使用率非常高,
所以我才觉得这个例子非常好。

youthy 发表于 2015-1-23 10:22:33

Arg参数没有用到
而且返回的写法没问题吗
应该是
List#list{one = List#list.one+Arg}吧

high佬全 发表于 2015-1-24 00:18:52

youthy 发表于 2015-1-23 10:22
Arg参数没有用到
而且返回的写法没问题吗
应该是


厉害,一针见血,你指正得非常对,可能冲忙写,连我都没留意到。多谢你的指教:D

high佬全 发表于 2015-1-24 00:20:45

-record(list,{one = 0, two =0, three= 0,four =0}).
-define(ONE,one).   -define(THREE,three).
-define(TWO,two).    -define(FOUR,four).

add(TypeList,Record_list) ->
Fun= fun({Type,Arg},List) ->
             case Type of
               ?ONE -> List#list{one = List#list.one+Arg};
               ?TWO -> List#list{two = List#list.two+Arg};
               ?THREE -> List#list{three = List#list.three+Arg};
               ? FOUR -> List#list{four = List#list.four+Arg}
             end
         end,
lists:foldl(Fun,Record_list,TypeList).

youthy 发表于 2015-1-25 19:29:47

high佬全 发表于 2015-1-24 00:20
-record(list,{one = 0, two =0, three= 0,four =0}).
-define(ONE,one).   -define(THREE,three).
-defi ...

我也是只懂些皮毛,多多交流

high佬全 发表于 2015-1-25 22:52:52

youthy 发表于 2015-1-25 19:29
我也是只懂些皮毛,多多交流

我也是初哥,:lol,所以有什么错也请你多多指教,同时你有什么好的东西记得分享下
给我这个小弟、
页: [1]
查看完整版本: lists:foldl的一个比较好的列子