データ型 Exp を、関数名 (Add、Subtract など) がキーで、値が式で発生した回数であるマップに変換したいと考えています。これが私のデータ宣言です:
data Exp = Number Int
| Add Exp Exp
| Subtract Exp Exp
| Multiply Exp Exp
| Divide Exp Exp
deriving Show
この問題は BST で実行できますが、別のデータ型ではこのタスクを実行できないようです。それが役立つ場合、これが私のBSTソリューションです:
import Data.Map
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
leaf x = Node x Empty Empty
foldt :: (a -> b -> b) -> b -> Tree a -> b
foldt f a Empty = a
foldt f a (Node x xl xr) = f x ar
where al = foldt f a xl
ar = foldt f al xr
insert' :: Ord a => a -> Map a Int -> Map a Int
insert' a = insertWith (+) a 1
toMap :: Ord a => Tree a -> Map a Int
toMap = foldt insert' empty
上記のプログラムを実行した後は簡単なはずですが、どこから始めればよいかさえわかりません。注: できるだけ多くの再帰を使用したいと考えています。前もって感謝します!