OCamlから離散数学の香りを感じる(初歩的)
こんにちは,matsuwakaです.最近
いまSICPを読むのは時間の無駄 - きしだのHatenaというブログを読んで,SICPも読みつつ,浅井健一氏の「プログラミングの基礎」という本でOCaml(オーキャムル)の勉強をしているんですが,OCamlになかなか(離散)数学味を感じたので少し書こうと思います.とはいえ数学的に近い記述ができるのがOCamlの特徴なのであたりまえではありますが.
OCamlから見える写像と集合の表現
例えば関数f(x) = x^2を定義しようとします.OCamlでは極めて直感的に定義出来て,
# let f(x) = x*x;;
となり,これをインタプリタに打ち込めば
val f : int -> int = <fun>
というのが出力されます.これは「int型からint型への写像ですよ」ということを意味しています.これはそのまんま数学の写像の書き方と同じですよね.(定義域はRではないけれど)
また,こういうのを応用すれば,
# let f(x,y) = x*x + x*y + y*y;;
ということもできて,これをまたインタプリタに打ち込めば
val f : int * int -> int = <fun>
というのが出力されます.この時注目してほしいのは,int*intという部分です.カンの良い人ならもうお気づきでしょう.そうです,集合の直積を表しています.(数学で書くなら,int*intはZ×Zになりますが.)
どうでしょう,ほとんどそのまま数学の記述ができますね(スバラシイ).ぜひOCamlいじってみてください.
それでは,失礼致します.