Guest User

Untitled

a guest
Aug 5th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.01 KB | None | 0 0
  1.  
  2. // Map Function
  3. let mapfunc (k, v) =
  4.     v |> Seq.map (fun(pet) -> (pet, 1))
  5.  
  6. // Reduce Function
  7. let reducefunc (k, (vs:seq<int>)) =
  8.     let count = vs |> Seq.sum
  9.     k, Seq.ofList([count])
  10.  
  11. // Map Reduce
  12. let mapreduce map reduce (inputs:seq<_*_>) =
  13.     let intermediates = inputs |> Seq.map map |> Seq.concat
  14.     let groupings = intermediates |> Seq.groupBy fst |> Seq.map (fun(x,y) -> x, Seq.map snd y)
  15.     let results = groupings |> Seq.map reduce
  16.     results
  17.  
  18. let alice = ("Alice", ["Dog";"Cat"])
  19. let bob = ("Bob",["Cat"])
  20. let charlie = ("Charlie",["Mouse"; "Cat"; "Dog"])
  21. let dennis = ("Dennis", [])
  22.  
  23. let people = [alice; bob; charlie; dennis]
  24.  
  25. [<EntryPoint>]
  26. let main argv =
  27.     let results = people |> mapreduce mapfunc reducefunc
  28.  
  29.     for result in results do
  30.         let animal = fst result
  31.         let count = ((snd result) |> Seq.toArray).[0]
  32.         printfn "%s : %s" animal (count.ToString())
  33.  
  34.     System.Console.WriteLine("done...")
  35.     System.Console.ReadKey() |> ignore
  36.     0
Add Comment
Please, Sign In to add comment