原则上,你的代码是没问题的。
从句法的角度来看,只有一些点可以简化。
let ppl:(string * string) list = [
("1", "Jerry");
("2", "Max");
("3", "Andrew");
]
编译器能够自行推导大多数类型:
let ppl = [ "1", "Jerry";
"2", "Max";
"3", "Andrew" ]
当然,您可以像这样重写过滤器,因为currying http://en.wikipedia.org/wiki/Currying:
let oddFilter (id:string, name:string) = (int id) % 2 = 1
let allFilter (id:string, name:string) = true
最大的改进是将索引与名称分开,并让程序进行编号。您不必使用字符串而不是数字,并且可以使用更惯用的无元组函数:
let ppl = [ "Jerry"; "Max"; "Andrew" ]
let oddFilter id name = id % 2 = 1
let allFilter id name = true
let createPerson id name = ...
The part
ppl |> List.filter(filter) |> List.map createPerson
将被重写为
[ for (index, name) in List.mapi (fun i x -> (i, x)) do
if filter index name then
yield createPerson (string index) name ]