赚钱之道- -| 回首页 | 2004年索引 | - -在北京

基本的序列操作(续)- -

                                      

映射变换(map):将某种操作(UnaryFunction)作用于一个序列的每个元素,结果是另一个序列。后一序列的元素数目等于前一序列,两者的对应位置上的元素具有某种逻辑上的对应关系。譬如:
 
LIST 1:    Person1,    Person2,    Person3,    Person4
LIST 2:    1500,        4000,       5000,        8000
对应关系:LIST2中每个元素(Integer)是LIST1中对应元素(Person)的salary属性。
 
过滤(filter):将某种判断条件(UnaryPredicate)作用于一个序列中的每个元素,结果是另一个序列。后一序列的元素少于或等于前一序列,后一序列包含的是前一序列中符合该判断条件的那些元素。譬如:
 
LIST 1:    Person1,    Person2,    Person3,    Person4
LIST 2:    Person1,    Person4
判断条件:LIST2中每个元素(Person)都来自LIST1,并且gender属性等于"Male"。
 
累加(accumulate):给定一个初始值及一个操作(BinaryFunction),将该操作逐一作用于序列的每个元素,结果是一个值。结果值代表遍历该序列之后的总值,包括序列中的最大(最小)值、序列总和(总乘积)等等。譬如:
 
LIST 1:    1,    2,    3,    4
RESULT:    12
累加操作:求两个元素的和。
初始值:0。
意义:求一个序列的总和。
 
大部分循环、判断的程序结构都是在做这几件事。我把它们封装成Functor,并且写了一段没有for循环、没有if判断的程序。这样做的好处是:(1)分离流程控制与流程中的操作;(2)流程与操作都不需要局部状态。缺点是:用Java的语法写出来太不自然,而且很多地方损失了编译期类型检查。

- 作者: gigix 2004年09月29日, 星期三 16:00

Trackback

你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=344907

回复

- 评论人:匿名

Fri Oct 01 08:49:43 CST 2004  作者Blog

这年头,大家都看SICP了

- 评论人:匿名

Thu Sep 30 08:53:37 CST 2004  作者Blog

累加(accumulate)这种模式在Functional Programming中惯用的称谓是:reduce


评论内容: