流行に乗って sleep sort を F# で実装してみました[A]。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | 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 さんが多相版を書いてくださっています。それと,シグネチャファイルの生成についても書かれています。
脚注
- 様々な言語で実装されています。 [↩]