Извлечение элементов графа в Haskell - PullRequest
0 голосов
/ 05 октября 2019

У меня есть маленький вопрос относительно Хаскелла. Если у меня есть тип данных, представляющий график, подобный этому:

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 и создать с ним список? Спасибо !!!

1 Ответ

2 голосов
/ 05 октября 2019

Функция keys возвращает все ключи карты. Таким образом, вы можете реализовать vertices так:

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