F#

TopCoder SRM 440 Div1 Medium in F#

F#で書いた。工夫した点?知りませんなぁ。

Life

private class Life : IDisposable { public Live() { while(this.Alive) { if(!this.WantToLive) { break; // kill myself } if(this.Riajuu) { Life.Enjoy(this); // 到達できないコードが検出されました } } this.Die(); } } let rec Life state = match …

末尾再帰たんの行方を探ってみた

F#

(* 再帰的な階乗の定義(F#) *) let rec fact = function 0 -> 1 | n -> n * fact (n-1) コンパイルしてデコンパイル↓ public static int fact(int _arg1) { switch (_arg1) { case 0: return 1; } return (_arg1 * fact(_arg1 - 1)); } ま さ に 直 訳 (* 末…

末尾再帰たん萌え

たとえばF#で階乗をつぎみたいに実装したとするよね↓ let fact n res = if n = 0 then res else fact (n-1) (n*res) 末尾再帰たんモエスなんだけど、末尾再帰って最適化されちゃうんだよね?特にSchemeとかだと。たとえばさっきの階乗をC風に書けば int fact…

マージソート書いてみた

F#

ソース↓ let rec mergesort cmp l = let rec merge l1 l2 res = match (l1, l2) with ([], []) -> res | ([], l) | (l, []) -> (List.rev l) @ res | (m::ms, n::ns) -> if (cmp m n) < 1 then merge ms l2 (m::res) else merge l1 ns (n::res) in let split…

階乗の実装

J F#

再帰の見本としてよく使われる階乗をJとF#で実装してみるテスト。 F#の場合 まずは普通に再帰的に実装してみる。 let rec fact = function 0 -> 1 | n -> n * fact (n-1) 次に末尾再帰の形で実装してみる。 let rec fact2 n res = if n = 0 then res else fa…