首页 > 解决方案 > 在 Haskell 中提取图形的元素

问题描述

我有一个关于 Haskell 的小问题。如果我有代表这样一个图表的数据类型:

import Data.Map (Map,empty,member,insert)

import Graphviz

-- | A directed graph
    data Graph v = Graph
    { arcsMap :: Map v [v]     -- A map associating a vertex with its 
                                  successors
    , labelMap :: Map v String -- The Graphviz label of each node
    , styleMap :: Map v String -- The Graphviz style of each node
    }

我想通过访问给定图形的每个顶点来创建一个列表。

像这样:

-- | Returns the list of vertices of a graph in ascending order
--
-- >>> vertices emptyGraph
-- []
-- >>> vertices $ addVertices emptyGraph [1,4,5,2,1]
-- [1,2,4,5]
vertices :: Graph v -> [v]

我的问题是如何告诉 Haskell 查看 arcsMap 中的每个顶点并用它创建一个列表?谢谢 !!!

标签: haskellgraphfunctional-programmingcustom-data-type

解决方案


该函数keys返回地图的所有键。所以你可以这样实现vertices

vertices :: Graph v -> [v]
vertices = keys . arcsMap

推荐阅读