【发布时间】:2010-10-20 22:57:54
【问题描述】:
我有一个定义为的搜索树:
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 :: (Ord a) => (b -> a -> b -> b) -> b -> Stree a -> b
我不完全了解发生了什么,也不知道该怎么做。
【问题讨论】:
-
(离题)。 GHC可以自动派生Functor和Foldable来定义以上两个函数(前提是
Ord a =>约束不存在)。 -
不清楚Ord的作用是什么。我假设这棵树是由 Ord 实例从左到右排序的。在这种情况下,是否允许“mapStree”假设其功能是单调的(即保留顺序)或者 mapStree 是否需要在运行时重新排序?
-
教授所说的大部分内容都不清楚,我什至不确定他是否知道Ord自己做了什么,因为他无法解释。
标签: search haskell tree higher-order-functions