Редактирование / обновление графиков в Haskell

Я использую Data.Graph Graph для моделирования симуляции в Haskell. Симуляция ограничена 2D сеткой, которую моделирует мой график. Узел в каждой точке сетки ниже будет содержать тип «Может быть, молекула», так что может присутствовать молекула или просто «Ничего».

1  - 2  - 3  
|    |    |  
4  - 5  - 6  
|    |    |  
7  - 8 -  9  

Я создал это представление, но когда дело доходит до обновления положения молекулы, я чувствую, что иду далеко по этому вопросу. То, что я сделал до сих пор, - это разделение всех узлов на список узлов. Я написал функцию, чтобы поменять местами два элемента в этом списке узлов. Но теперь, когда я собираю все вместе, я сталкиваюсь с проблемами, потому что для создания нового графа мне нужен список вершин, который я легко получаю с помощью функции графа вершин. Но мне также нужно закрепить это со списком вершин, которых касается ребро. К сожалению, функция Edge в Data.Graph Graph возвращает список кортежей типа Edge, который, насколько я понимаю, не очень полезен для генерации графа, хотя я мог бы написать функцию для получения вершин списка, у которых есть ребра к вершине. Мне кажется, что этого достаточно, и я задаюсь вопросом, не упустил ли я смысл, существует ли функция Graph, которая просто берет график и возвращает график с обновленным узлом?

8
задан Martin Geisler 20 December 2011 в 14:33
поделиться