对于我的函数式编程类的作业,我正在树上练习。尤其是在玫瑰树上。在我们得到的框架中,已经定义了数据类型'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
  • 和 child rs :: [Rose a]
  • 通过t = x :> rs

  • 当然,您也可以找回这样的元素:
    root (x :> rs) = ...
    

    我希望你自己得到其余的;)

    10-06 02:43