我想将我的数据类型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