我有自定义递归数据类型
data Vertex = Vertex Int [Vertex]
其中Int
是顶点的索引号,[Vertex]
是与此顶点相邻的顶点。
现在,我想将此数据类型显示为顶点索引列表:假设有两个顶点a
和b
,其索引为1
和2
它们彼此相邻。我的输出应如下所示:"[(1, [2])]"
。
我发现我必须为Show
编写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])]
答案 0 :(得分:1)
如果你只是需要直接邻接,那么递归并不是真正的问题,因为你可以做到
toAdjacency :: [Vertex] -> [(Int, [Int])]
toAdjacency = map outFrom
where
outFrom (Vertex i vs) = (i, map inTo vs)
inTo (Vertex i _) = i
然后show . toAdjacency
正是您所追求的格式。