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