我想將我的數據類型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
現在看來似乎應該是在執行上述程序後,簡單,但我甚至不知道從哪裏開始。注意:我想盡可能多地使用遞歸。提前致謝!
謝謝您的回答!我能夠得到它的工作,現在我只是分解它,試圖瞭解發生了什麼。再次感謝! – user2548080