流行に乗って 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 さんが多相版を書いてくださっています。それと,シグネチャファイルの生成についても書かれています。
脚注
- 様々な言語で実装されています。 [↩]