我的影片定义为搜索树:如何在搜索树上定义贴图和折叠?
data (Ord a) => Stree a = Null | Fork (Stree a) a (Stree a) deriving Show
,我必须定义两个函数,mapStree:
mapStree :: (Ord b, Ord a) => (a -> b) -> Stree a -> Stree b
和foldStree:
foldStree :: (Ord a) => (b -> a -> b -> b) -> b -> Stree a -> b
我不完全了解发生了什么,不知道如何做到这一点。
(题外话)。 GHC可以自动派生Functor和Foldable来定义上述两个函数(假设'Ord a =>'约束不存在)。 – kennytm 2010-10-21 07:02:01
目前还不清楚Ord的作用是什么。我认为这棵树是由Ord实例排序的,从左到右。在这种情况下,是否允许'mapStree'假定它的函数是单调的(即保留顺序)还是mapStree需要重新排序? – mokus 2010-10-21 13:29:01
教授谈论的大部分内容都不清楚,我甚至不确定他是否知道Ord自己做了什么,因为他无法解释它。 – fotg 2010-11-01 21:00:31