のびのびなHaskell日記

2006-07-17

パターンマッチ

フツケル 168頁

変数パターンの定義をフツケル170頁より引用します。

id :: a -> a
id x = x
仮引数の「x」が変数パターンです。
変数パターンはどんな値に対してもマッチし、その値に変数を束縛します。
 --変数パターンのサンプルコード
hoge x = print x
main = do hoge 1
          hoge 10

最初引用した変数パターンの説明に出てくる、「その値に変数を束縛します」を以下のように勘違いしていました。

hoge xの変数xを値に束縛するということは、hoge 10はhoge xにマッチするから、xを10に束縛する。Haskellは再代入は出来ない。

従ってhogeメソッドを抜けてもxの値は10であるはず(?)ということで以下のようなコードを書いていました。結果は「Not in scope: `x'」とエラーが表示されて実行出来ません。

xは仮引数ですから、メソッドを抜けたら値を消失するからエラーが出て当たり前と言えば当たり前なのですが、束縛しますと書いてあったのでメソッドを抜けても10にxが束縛されているのかと思ってしまいました(^_^;)

hoge x = x
main = do print $ hoge 1
          print x

ゲスト



トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060717