Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中的标记树_Haskell_Tree_Monads_State Monad - Fatal编程技术网

haskell中的标记树

haskell中的标记树,haskell,tree,monads,state-monad,Haskell,Tree,Monads,State Monad,我有一个任意的树,想把它转换成一个整数树,原始值应该被整数替换。每次出现时,必须用相同的数字替换相同的值 提供了遍历树的函数,这是我的标签函数 label :: Ord a => a -> State (Store a Int) Int 我相信我需要一个堆栈来存储标签,但我不知道如何应用它 ,如果您有遍历功能,请提供任何指导 traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a ->

我有一个任意的树,想把它转换成一个整数树,原始值应该被整数替换。每次出现时,必须用相同的数字替换相同的值

提供了遍历树的函数,这是我的标签函数

label :: Ord a => a -> State (Store a Int) Int
我相信我需要一个堆栈来存储标签,但我不知道如何应用它
,如果您有遍历功能,请提供任何指导

traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
正如
Traversable
typeclass所给出的,那么您就有了
f~状态(存储一个Int)
,所以

traverse label :: (Ord a, Traversable t) => t a -> State (Store a Int) (t Int)
因此,您应该能够将
遍历标签
应用于您的树,然后执行该状态操作以获取您的标签树,这样就完全可以了

labelTree :: (Tree t, Ord a) => t a -> Store a Int -> (t Int, Store a Int)
labelTree tree labelStore = runState (traverse label tree) labelStore
我提供了
labelStore
作为参数,因为可能需要为该函数提供一组现有的标签,并且不清楚如何构造新的
存储


然而,我要指出的是,即使在这里使用树也没有什么特别之处,任何
可遍历的
就足够了,因此您可以将其应用于列表、
映射
s、自定义类型,或者其他什么,只要它是一个
可遍历的
容器,其中包含
Ord a=>a
值。

如果您有遍历函数

traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
正如
Traversable
typeclass所给出的,那么您就有了
f~状态(存储一个Int)
,所以

traverse label :: (Ord a, Traversable t) => t a -> State (Store a Int) (t Int)
因此,您应该能够将
遍历标签
应用于您的树,然后执行该状态操作以获取您的标签树,这样就完全可以了

labelTree :: (Tree t, Ord a) => t a -> Store a Int -> (t Int, Store a Int)
labelTree tree labelStore = runState (traverse label tree) labelStore
我提供了
labelStore
作为参数,因为可能需要为该函数提供一组现有的标签,并且不清楚如何构造新的
存储


然而,我要指出的是,即使在这里使用树也没有什么特别的,任何
可遍历的
就足够了,因此您可以将其应用于列表、
映射
s、自定义类型,或者其他任何东西,只要它是一个
可遍历的
容器,其中包含
Ord a=>a
值。

堆栈在这里不合适,但是看起来
Store
是一种映射类型,处理一段数据到一个整数的映射。堆栈在这里不合适,但看起来
Store
是一种映射类型,处理一段数据到一个整数的映射。