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いじってみてください.

 

それでは,失礼致します.