Erlang中文论坛

标题: lists:foldl的一个比较好的列子 [打印本页]

作者: high佬全    时间: 2015-1-15 00:04
标题: 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
Arg参数没有用到
而且返回的写法没问题吗
应该是
List#list{one = List#list.one+Arg}吧
作者: high佬全    时间: 2015-1-24 00:18
youthy 发表于 2015-1-23 10:22
Arg参数没有用到
而且返回的写法没问题吗
应该是

  厉害,一针见血,你指正得非常对,可能冲忙写,连我都没留意到。多谢你的指教
作者: high佬全    时间: 2015-1-24 00:20
-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
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
youthy 发表于 2015-1-25 19:29
我也是只懂些皮毛,多多交流

  我也是初哥,,所以有什么错也请你多多指教,同时你有什么好的东西记得分享下
给我这个小弟、





欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3