F# の整数は int(32ビット整数), int64(64ビット整数), bigint(多倍長整数) があって、もちろんそれぞれ型が違う。 ベキ乗とか階乗とか、どの整数型でも同じことをしたいだけでも、普通に書いたらそれぞれ実装しないといけない。
ところで F# には自動汎化という仕組みがあって、要は型を制限しないように書けば、互換性のあるどの型でも使える関数ができる。 「型安全なダックタイピング」と言っておけば、かっこいい。
let max a b = if a > b then a else b
let x = max 1 2 // int let xL = max 1L 2L // int64 let xI = max 1I 2I // bigint
自動汎化がうまくいっているかは、Visual Studio でソースを書いて、関数名にマウスを重ねれば確かめられる。
型として 'a のように表示されれば、汎化が働いていることがわかる。 関数や変数にマウスオーバーすれば推論された型情報が表示されるのは...

まだコメントはありません。最初のコメントを登録してみませんか?