Я работаю над библиотекой для поверхностей подразделения. Чтобы представить топологию сетки, я использую своего рода реечную структуру данных с разделенными вершинами (см. диаграмму слева).
Во время построения сетки, которую также можно рассматривать как граф, создаются узлы, которые должны указывать на другие, которых еще не существует (см. диаграмму справа — пунктирная стрелка представляет будущие связи). Классическое решение — создать узел с пустым указателем, а затем обновить его при создании другого узла. Так как я работаю на Haskell :) и не хочу переходить на темную сторону кода (примеси) мне интересно, можно ли построить сетку (граф) без обновления данных. Я предполагаю, что CPS (стиль непрерывного прохождения) может справиться с этой задачей, но я не могу найти способ.
Это просто сон?
ОБНОВЛЕНИЕ
Поясню немного свой вопрос. Я ищу способ создания узлов с прямыми ссылками (указателями), и под прямой ссылкой я подразумеваю отсутствие промежуточных таблиц или карт. Простое определение данных, подобное этому:
data Mesh = Edge Vertex Mesh Mesh Vertex | Ground
Если я не ошибаюсь и если это выполнимо, CPS позволит эффективно создавать (без обновлений узлов) и эффективно пересекать (без поиска на картах) графа. С другой стороны, граф станет полностью неизменным, т.е. одно изменение необходимо распространить по всему графу, например. изменение хвоста списка.
Я ошибся? Если нет, то как это сделать?
Mesh
; т. е. вы хотите связать себя узами брака, но вы не сможете определить, что, если вы идете куда-то и обратно, вы на самом деле возвращаетесь, а не куда-то еще в бесконечной циклической структуре. В математике графы определяются над произвольным набором вершин-носителей; Я предлагаю сделать то же самое для чистых функциональных графов. - person luqui   schedule 16.09.2011