Sleep sort を F# で実装してみた


流行に乗って sleep sort を F# で実装してみました[A]

open System.Collections.Concurrent

let enqueue (queue: ConcurrentQueue<int>) x =
   let weight = 500
   async {
      do! Async.Sleep(x * weight)
      queue.Enqueue x
   }
let sleepSort xs =
   let queue = ConcurrentQueue<int>()
   xs
   |> List.map (enqueue queue)
   |> Async.Parallel
   |> Async.RunSynchronously
   |> ignore
   queue

for x in (sleepSort [10; 3; 8; 2; 7]) do
   printfn "%d" x

追記

  • [2011-05-21 12:30+0900] このポストでは int しか対応していませんが,『F#でsleep sort』で zecl さんが多相版を書いてくださっています。それと,シグネチャファイルの生成についても書かれています。

脚注

  1. 様々な言語で実装されています。 []