繁体   English   中英

Haskell:显示递归数据类型

[英]Haskell: Show recursive data type

我有一个自定义的递归数据类型

data Vertex = Vertex Int [Vertex]

其中Int是顶点的索引号, [Vertex]是与该顶点相邻的顶点。

现在,我想将此数据类型显示为顶点索引列表:假设有两个顶点ab分别具有索引12并且它们彼此相邻。 我的输出应如下所示: "[(1, [2])]"

我发现必须编写Show for Vertex的实例。 这是我的问题,如何显示递归数据类型? 我认为Haskell的懒惰可能是解决方案?

编辑-示例

如前所述,我具有Vertex数据类型。 现在,我有了一个顶点及其相邻顶点的邻接表:

adjacencyList :: [Vertex]
adjacencyList = [a, b, c]
 where a = Vertex 6 [b]
       b = Vertex 7 [a, c]
       c = Vertex 12 [b]

当我写这个

print adjacencyList

我希望输出看起来像这样:

[(6, [7]), (7, [6, 12]), (12, [7])]

如果您只需要直接邻接,那么递归并不是真正的问题,因为您可以

toAdjacency :: [Vertex] -> [(Int, [Int])]
toAdjacency = map outFrom
  where
    outFrom (Vertex i vs) = (i, map inTo vs)
    inTo (Vertex i _) = i

然后show . toAdjacency show . toAdjacency正是您所追求的格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM