飯吹いた
オレオレマージソートの一部
let rec merge_two ls1 ls2 ret = match ls1, ls2 with | x1 :: xs1, x2 :: xs2 -> if (comp x1 x2) then merge_two xs1 ls2 (x1 :: ret) else merge_two ls1 xs2 (x2 :: ret) | ls1, [] -> rev_append ls1 ret | [], ls2 -> rev_append ls2 ret in let rec merge_two_rev ls1 ls2 ret = match ls1, ls2 with | x1 :: xs1, x2 :: xs2 -> if (comp x2 x1) then merge_two_rev xs1 ls2 (x1 :: ret) else merge_two_rev ls1 xs2 (x2 :: ret) | ls1, [] -> rev_append ls1 ret | [], ls2 -> rev_append ls2 ret in
標準ライブラリの(マージ)ソートの一部
let rec rev_merge l1 l2 accu = match l1, l2 with | [], l2 -> rev_append l2 accu | l1, [] -> rev_append l1 accu | h1::t1, h2::t2 -> if cmp h1 h2 <= 0 then rev_merge t1 l2 (h1::accu) else rev_merge l1 t2 (h2::accu) in let rec rev_merge_rev l1 l2 accu = match l1, l2 with | [], l2 -> rev_append l2 accu | l1, [] -> rev_append l1 accu | h1::t1, h2::t2 -> if cmp h1 h2 > 0 then rev_merge_rev t1 l2 (h1::accu) else rev_merge_rev l1 t2 (h2::accu) in
なんかまる写ししたみたいだ。