Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. #time "on"
  2.  
  3. open System.Diagnostics
  4.  
  5. type State = { remaining: int64; aggregate: int64 }
  6.  
  7. let div = 10L
  8.  
  9. let rec skynet num size postback =
  10. if size = 1L then
  11. postback num
  12. else
  13. let agent = MailboxProcessor<_>.Start(fun inbox ->
  14. let rec loop state =
  15. async {
  16. let! value = inbox.Receive()
  17. if state.remaining = 1L then
  18. postback (state.aggregate + value)
  19. else
  20. return! loop { remaining = state.remaining - 1L; aggregate = state.aggregate + value }
  21. }
  22. loop { remaining = div; aggregate = 0L })
  23. for i = 0 to 9 do
  24. let subSize = size / div
  25. let subNum = num + (int64 i) * subSize
  26. skynet subNum subSize agent.Post
  27.  
  28. skynet 0L 1000000L (printfn "Value = %d")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement