SMLでsleep sort

書いてみた。
sleep sortとは


コード

open Posix;
fun allwait () =
  let val _ = (Process.wait (); ())
                handle SysErr => ()
  in allwait ()
  end

fun sleep_print x =
  (Process.sleep
    (Time.fromSeconds
      (LargeInt.fromInt x))
  ;print (Int.toString x))

fun sleep_sort [] = allwait()
  | sleep_sort (x::xs) =
    case Process.fork ()
      of NONE => sleep_print x
       | SOME pic => sleep_sort xs

実行例。

- sleep_sort [ 5, 3, 6, 3, 6, 3, 1, 4, 7];
1val it = () : unit
- 3val it = () : unit
- 3val it = () : unit
- 3val it = () : unit
- 4val it = () : unit
- 5val it = () : unit
- 6val it = () : unit
- 6val it = () : unit
- 7val it = () : unit
-

うーむ。こなれて無い感がすごい(汗