RWH
3.8まで読んだ。3.7のあとの練習問題は、2がどうもうまく解けてない気がしてならないなぁ。もう少し考えてみよう。
toList :: List a -> [a] -- toList (Cons x xs) = (:) x (toList xs) toList (x `Cons` xs) = (:) x (toList xs) toList Nil = []
1は同型なものだから、中置にすると本当に同じになる。
追記 11/24 22:21
data Tree a = Node a (Maybe(Tree a)) (Maybe(Tree a)) deriving (Show)
やっぱりこうにしか書けないなあ。返値はTree a
なのに引数はMaybe (Tree a)
なのがちょっと気に入らないけど。
追記 11/25 22:27
コメントより、
TreeのルートからEmptyのときを表せますか?
とのことだけど、ルートノードだけで、子を持たないツリーってことでいいのかなぁ? それなら、
t = Node 1 Nothing Nothing
でいいよね。
追記 11/26 20:51
さらにコメントより、
ルートノードも値を持たないという意味のEmptyです。
あー、そうか。
t = Empty
なるツリーがあっていいのか。となるとこれじゃ表現できないなあ。
data Tree2 a = Node (Maybe a) (Maybe (Tree2 a)) (Maybe (Tree2 a)) deriving (Show)
なる型だと、途中にNothing
なノードを持つツリーができてしまうからちょっとアレか。とはいえ構成子を1つしかもたないような型という条件だとちょっとすぐには思いつかないや。なにかもっとスマートな解があるのかなあ。
あとせめてこのエントリへのコメントだけでも一貫した名前を名乗って欲しかったり。別に本名を名乗れとか言ってるわけじゃないし。名前に_だけとかないわー。