Haskell を使用して、ツリーの葉の総数をカウントする関数を作成しています。ツリーを次のように定義しました。
data Tree a = Leaf | Node a (Tree a) (Tree a)
これを行う関数を次のように記述します。
countL :: Tree a -> Int
countL Leaf = 1
countL (Node x tL tR) = (countL tL) + (countL tR)
これは機能しますが、fold 関数を使用して同じことを行うことで、さらに一歩進めたいと思います。私は次のようにして定義したツリーの作業折りたたみ関数を持っています:
mytFold :: (a -> b -> b -> b) -> b -> Tree a -> b
mytFold f g Leaf = g
mytFold f g (Node a xl xr) = f a (mytFold f g xl) (mytFold f g xr)
折り畳み関数を含めようとしました(これを実行して定義したヘルパー関数も使用しました:
countL' :: Tree a -> Integer
countL' Leaf = 1
countL' = mytFold leafy 0 where
leafy tL tR = tL + tR
しかし、私はいくつかの奇妙なエラーが発生しています。誰が何が悪いのかについての洞察を持っていますか?