1
下面是我会在标准库中找到的东西吗?是否有一个列表模块功能就像解压缩变压器一样
split transformer1 ([], []) [("Foo", 1); ("Bar", 2); ("FooBar", 3)];;
> val it : string list * int list = (["FooBar"; "Bar"; "Foo"], [3; 2; 1])
这里是我的执行
let split transformer defval stream =
let rec split' s acc =
match s with
| [] -> acc
| x::xs -> split' xs (transformer x acc)
split' stream defval
let transformer1 (key, item) (akey, aitem) = (key::akey, item::aitem)
let transformer2 (key, item) (akey) = (key::akey)
let transformer3 (key, item) (a1, a2, a3) = (key::a1, item::a2, (item + 1)::a3)
split transformer1 ([], []) [("Foo", 1); ("Bar", 2); ("FooBar", 3)];;
split transformer2 ([]) [("Foo", 1); ("Bar", 2); ("FooBar", 3)];;
split transformer3 ([], [], []) [("Foo", 1); ("Bar", 2); ("FooBar", 3)];;
哦,我的 - 在FP方面还有很多东西需要我学习。我必须承认褶皱进入了我的脑海,但不知怎的,对我来说“折叠”的结果总是一个标量值。回到一个更复杂的结构从未跨过我的脑海。可能是由于几乎所有的折叠例子都返回了一个标量。 – robkuz