人気ブログランキング | 話題のタグを見る

条件分岐: パターンマッチ2

『追加のプリミティブ: 部分適用』の続きだ。前回までで、論理計算もできるように拡張されたが、まだ条件分岐がない。『条件分岐: パターンマッチ2』では、条件分岐の機能が追加される。また、入れ子になったパターンマッチの例の提示となっている。

if 文は関数の primitives テーブルに追加されるのではなく直接 eval 関数として定義される。

eval (List [Atom "if", pred, conseq, alt]) =
    do result <- eval pred
       case result of
         Bool False -> eval alt
         otherwise -> eval conseq

プログラムの内容は単純だ、まず eval の引き数が if 文の形式のリストかどうかをパターンマッチで判断する。つぎに、pred を評価し、その値が Bool False の時は、alt(ernative) を評価し、そうでないときは conseq(uence) を評価するだけだ。真偽の条件分岐に if 文を使わず、パターンマッチで行なっているので、入れ子になったパターンマッチになっている。

条件分岐をパターンマッチで行うと if 文を使うより可読性が高いように思うのは管理人だけだろうか。
by tnomura9 | 2011-12-16 12:34 | Haskell | Comments(0)
<< リストのプリミティブ: car... 48時間でSchemeを書こう... >>