パターンマッチ
ghcコマンドの場合-Wオプションでパターンマッチで実行時エラーが起きる場合に警告してくれるそうです。
変数パターン、「_」パターン、リテラルパターン、タプルパターン、リストパターン、データコンストラクタパターン、「@」パターンについての説明を読みました。
タプルパターンはid:MAS3:20070907#c1189118775で教えていただいたものですね。
ガードはid:MAS3:20070820#p1のところでパターンマッチで条件式が書ければすごくすっきり書けますねとかいた物が実現できます。
こんなのを書いていました。10の部分はgetArgsを使ってコマンドラインパラメータから取りたかったのですが、文字列を数値に変換する方法が分からなくて断念。基本的なことができないです。
main = do print $ fact 10 fact :: Int -> Int fact n | n < 0 = n * fact(n+1) | n == 0 = 1 | otherwise = n * fact(n-1)
以下のように10の所を-9にしたらエラーになってしまいました。
main = do print $ fact -9 fact :: Int -> Int fact n | n < 0 = n * fact(n+1) | n == 0 = 1 | otherwise = n * fact(n-1)
以下のように修正。
main = do print $ fact $ -9 fact :: Int -> Int fact n | n < 0 = n * fact(n+1) | n == 0 = 1 | otherwise = n * fact(n-1)
マイナスが駄目ならプラスも駄目だろうなと書いたらやっぱりエラー。
main = do print $ fact +9 fact :: Int -> Int fact n | n < 0 = n * fact(n+1) | n == 0 = 1 | otherwise = n * fact(n-1)