haskell 树:如何得到叶为任意类型二叉树?

xoshrz7s  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(182)

创建 了 一 个 二叉树 结构 , 值 可以 是 一 个 有 两 个 分支 的 节点 , 一 个 叶子 或者 是 空 的 。 我 没有 特别 定义 叶子 是 一 个 特定 的 类型 , 所以 我 可以 创建 所有 叶子 都 是 整数 或者 都 是 字符 串 的 树 , 但是 我 怎么 才能 让 它 接受 这 两 种 类型 的 混合 , 所以 一 个 叶子 是 整数 也 是 字符 串 的 树 呢 ?

data Tree a = Empty | Leaf a | Node a (Tree a) (Tree a)

我 想要 的 示例 :一 个 有 两 个 叶子 的 节点 , leaf1 = "a string"leaf2 = 5 我 目前 的 问题 是 leaf1leaf2 必须 是 相同 的 类型 , 要么 都 是 整数 , 要么 都 是 字符 串 。 如果 我 混合 了 , 我 会 得到 一 个 错误 。

v6ylcynt

v6ylcynt1#

实际上,你不能在Haskell中创建可以包含 any 类型的树。但是,你可以用多个构造函数定义自定义类型,如下所示:

data Val a b = Int a | String b deriving (Show, Eq)

然后使用Val类型创建包含两种类型的树:

data Tree a = Leaf a | Node a (Tree a) (Tree a) deriving (Show, Eq)
let v = Node (String "eh") (Leaf (Int 12)) (Leaf (Int 123))
:t v
v :: Num a => Tree (Val a String)

相关问题