SMLで階乗
30分プログラム、その640。SMLで階乗を書いてみた。
StandardMLは学部の授業で習ったけれども、一切記憶に残っていない。
さすがにそれはまずい気がするので、当時の教科書(プログラミング言語StandardML入門)をひっぱりだして、階乗のコードを何個か書いてみた。
書いてるうちに昔の記憶がよみがえってきたー、ってこともなかったです。
ソースコード
ふつうの。
fun fact_1 n = if n = 0 then 1 else n * fact_1 (n-1)
パターンマッチ。
fun fact_2 0 = 1 | fact_2 n = n * fact_2 (n-1)
ローカルな変数束縛。
fun fact_3 n = let fun fact' accum n = if n = 0 then accum else fact' (n*accum) (n-1) in fact' 1 n end
fun $ (f,g) = f g; infixr 9 $ fun range a b = List.tabulate (b-a,fn i=>i+a); fun fact_4 n = foldl op * 1 $ range 1 n;