对于我的函数式编程类的作业,我正在树上练习。尤其是在玫瑰树上。在我们得到的框架中,已经定义了数据类型'Rose',但是它具有一个运算符:>。我在hoogle上搜索了它,并说它是序列中最右边的元素,而它是序列中其余部分的元素。 (以下框架的一部分)
data Rose a = a :> [Rose a]
deriving (Eq, Show)
-- Exercise 1
root :: Rose a -> a
root = undefined
children :: Rose a -> [Rose a]
children = undefined
我绝对不需要你们告诉我应该如何实现root和child功能。但是,如果你们可以给我一些有关如何读取“data Rose a”行的提示,或者告诉我如何建立一棵玫瑰树。当我喜欢练习时,这些东西将是非常大的帮助。
我希望有人能指出我正确的方向。
最佳答案
t与列表的定义非常相似:
(:>)
有点像(:)
data Rose a = a :> [Rose a]
告诉您,您可以获得t :: Rose a
带有元素
x :: a
的rs :: [Rose a]
t = x :> rs
当然,您也可以找回这样的元素:
root (x :> rs) = ...
我希望你自己得到其余的;)