1
CLIPS

F# で汎用の関数(汎用のリテラル)を書く

574日前に更新 aoki1210aoki1210 582日前に登録
2010年10月25日 GMT 2010年10月17日 GMT

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 のように表示されれば、汎化が働いていることがわかる。 関数や変数にマウスオーバーすれば推論された型情報が表示されるのは...

カテゴリー: プログラム(C#/VB/C++/F#/PS/Iron..) | クリック数: 6 | | ソースサイト: d.hatena.ne.jp | カウンタを表示
タグ: F#

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

コメントするためにはログイン もしくは サインアップしてください。