Haskell:如何使用这个数据结构

标签 haskell data-structures

我必须使用包含以下数据结构的作业代码:

data Rose a =  a :> [Rose a]

但是,我不知道如何使用此数据结构,例如:如何创建它的实例以及如何循环访问一个实例?

如果有人能帮我解决这个问题。

最佳答案

该数据类型的构造函数是(:>) ,其类型为(:>) :: a -> [Rose a] -> Rose a 。您可以用它来构造值,例如

> 1 :> [] :: Rose [Int]
1 :> []
> 1 :> [2 :> [], 3 :> [1 :> []]] :: Rose [Int]
1 :> [2 :> [], 3 :> [1 :> []]]

它在功能上等同于

data Tree a = Node a [Tree a]

具有不同的名称,即Tree <=> RoseNode <=> :>

如果你想要 Functor例如,你会这样做

instance Functor (Rose a) where
    -- fmap :: (a -> b) -> Rose a -> Rose b
    fmap f (a :> rest) = (f a) :> (map (fmap f) rest)

关于Haskell:如何使用这个数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302182/

相关文章:

java - 如何创建一个完全不可变的树层次结构?建筑先有鸡还是先有蛋

haskell - 约束数据类型

用于解析 LLVM IR 的 Haskell 包?

Haskell 类型类(Float 并不意味着 Floating?)

haskell - 这个函数可以写成无点风格吗?如果不是,为什么?

haskell - 在 M 中是否存在单子(monad)自然的非同一性单子(monad)态射 M ~> M?

json - 加入网络标准的 YAML 格式有什么问题吗

java - 作业问题的有效算法

r - R中反转下三角矩阵的树列表

java - 条件等于的 HashCode