Я использую Data.Graph Graph для моделирования симуляции в Haskell. Симуляция ограничена 2D сеткой, которую моделирует мой график. Узел в каждой точке сетки ниже будет содержать тип «Может быть, молекула», так что может присутствовать молекула или просто «Ничего».
1 - 2 - 3
| | |
4 - 5 - 6
| | |
7 - 8 - 9
Я создал это представление, но когда дело доходит до обновления положения молекулы, я чувствую, что иду далеко по этому вопросу. То, что я сделал до сих пор, - это разделение всех узлов на список узлов. Я написал функцию, чтобы поменять местами два элемента в этом списке узлов. Но теперь, когда я собираю все вместе, я сталкиваюсь с проблемами, потому что для создания нового графа мне нужен список вершин, который я легко получаю с помощью функции графа вершин. Но мне также нужно закрепить это со списком вершин, которых касается ребро. К сожалению, функция Edge в Data.Graph Graph возвращает список кортежей типа Edge, который, насколько я понимаю, не очень полезен для генерации графа, хотя я мог бы написать функцию для получения вершин списка, у которых есть ребра к вершине. Мне кажется, что этого достаточно, и я задаюсь вопросом, не упустил ли я смысл, существует ли функция Graph, которая просто берет график и возвращает график с обновленным узлом?