6.3.1 处理计划列表
在前面的示例中,因为我们想要打印新的计划,因此,使用了命令式的 for 循环;如果想要创建包含新的计划列表,可以使用 List.map 函数,就像这样:
let newSchedules =
List.map(fun s –>
s |> mapSchedule (fun d -> d.AddDays(7.0))
)schedules
List.map 函数的第一个参数是函数,通过使用原来的计划,获得一个新的计划值。在此示例中,我们计算出一个新的计划,并将它作为函数的结果返回。前面的代码可以通过使用管道和散函数应用来简化,就像这样:
let newSchedules =
schedules|> List.map (mapSchedule (fun d -> d.AddDays(7.0)))
当我们为函数 mapSchedule 指定第一个参数(用于计算日期的函数),就得到类型为 Schedule –> Schedule 的函数,这正是 List.map 操作需要的第一个参数值,因此,不必显式写 lambda 函数。这个示例还演示了很多高阶函数把原始值作为最后一个参数值的原因,即,在处理列表值时,可以同时使用管道和散[函数]应用。
还有一种方法,是使用序列表达式(sequence expressions),同样简洁,但是,对于新手来说,可能更具可读性。我们会在第十二章讨论序列表达式,现在,要看看 C# 是如何实现相同功能的。