Kag*_*sen 4 f# functional-programming
声明一个将对列表转换为Relation的函数.
type Relation<'a,'b> = ('a * 'b list) list
Run Code Online (Sandbox Code Playgroud)
基本上,转这个:
[(2,"c");(1,"a");(2,"b")]
Run Code Online (Sandbox Code Playgroud)
进入这个:
[(2,["c";"b"]);(1,["a"])]
Run Code Online (Sandbox Code Playgroud)
以这种形式:
toRel:(’a*’b) list -> Rel<’a,’b>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?这不是家庭作业,只是自学,这个让我有点难过,考虑到形式不允许积累.
[(2,"c");(1,"a");(2,"b")]
|> List.groupBy fst
|> List.map (fun (x,y)->x,List.map snd y)
Run Code Online (Sandbox Code Playgroud)
结果:
[(2, ["c"; "b"]); (1, ["a"])]
Run Code Online (Sandbox Code Playgroud)
对于toRel位,类型推断很方便:
let toRel xs =
xs
|> List.groupBy fst
|> List.map (fun (x,y)->x,List.map snd y)
Run Code Online (Sandbox Code Playgroud)
用法:
toRel [(2,"c");(1,"a");(2,"b")]
Run Code Online (Sandbox Code Playgroud)