Okada Hiroshi の blog

typo が多いです

Haskell 勉強記録 15 日目

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

今日は 第7章:型や型クラスを自分で作ろう 再帰的なデータ構造 の終わり (位置 3379/11175) まで読み進めました。

{-# OPTIONS -Wall #-}

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving(Show)

singleTon :: a -> Tree a
singleTon x = Node x EmptyTree EmptyTree

treeInsert :: (Ord a) => a -> Tree a -> Tree a
treeInsert x EmptyTree = singleTon x
treeInsert x (Node a left right)
    | x == a  = Node x left right
    | x < a   = Node a (treeInsert x left) right
    | x > a   = Node a left (treeInsert x right) 

とすると

inarytree.hs:9:1: Warning:
    Pattern match(es) are non-exhaustive
    In an equation for `treeInsert':
        Patterns not matched: _ (Node _ _ _)
Ok, modules loaded: Main.

という警告が出て、少し悩みました。 結局ガードの最後の部分が otherwise でなかったのが原因のようで、

treeInsert :: (Ord a) => a -> Tree a -> Tree a
treeInsert x EmptyTree = singleTon x
treeInsert x (Node a left right)
    | x == a    = Node x left right
    | x < a     = Node a (treeInsert x left) right
    | otherwise = Node a left (treeInsert x right) 

と書いたら警告は出なくなりました。

今日は、新しく出てきた関数はありませんでした。 →今まで出てきた関数