初心者にやさしい言語OCamlでプログラミングを学んでいます(データ型定義)
やさしくても「表現力と安全にこだわった仕事で使える関数型言語」OCamlによるプログラミング学習の第8回です。テキストは、公式ページのあの日からOCamlです。
内容は、typeによるデータ型の定義についてのまとめです。
新しいデータ型
OCamlでは、ユーザが新しいデータ型を定義できる。データ型の定義は、typeにより行う。
(この例では、starが型の名前になります。また、SiriusやHIPはコンストラクタと呼ばれ、star型の値を生成します。)
多相かつ再帰な定義
定義するデータ型は、多相かつ再帰的なものでもよい。
これについて、二分木を例に説明する。この二分木は、任意の型のデータを保持する。
葉は、値を保持せず、ノードは、左の木、'aの型の値、右の木を保持する。
(多相と再帰は、of以降の定義により実現されています。具体的には、型変数'aで型を指定することで多相になり、treeを参照することで再帰的になります。)
パターンマッチング
この木についての多相な再帰関数の例を以下に示す。関数は、コンストラクタを用いたパターンマッチングにより定義される。
まず、各ノードが整数値を保持する木について、それらの値の合計を求める関数totalを示す。
次に、各ノードが保持する木を左右を反転させる関数flipを示す。
GC
ところで、OCamlはガーベージコレクションを備えた言語なので、プログラマは明示的に記憶領域を開放する必要がない。
前の例では、tr = flp flipped_trの真偽判定された後は、flip flipped_trに到達できなくなるので、その記憶領域がGCにより回収される。
(どう訛ったらガベージに聞こえるのだろう?)
まとめ
今回は、typeによるデータ定義について学びました。
ところで、見出し画像にフライドポテトを使いたいのですが、なかなか好みの画像が見つかりません。どれも白すぎたり茶色すぎたりして、食指が動きません。綺麗な写真とおいしそうな写真は違うので、写真は難しいです。自分で撮ってないのに偉そうですが。
次回は、例外処理の予定です。
古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。