Можете ли вы сказать мне, как его создать?
Существуют различные способы получения прямого циклического значения в F # (как показали Brian и kvb), но я бы отметил, чтоэто редко то, что вы на самом деле хотите.Непосредственно циклические структуры данных предназначены для отладки и, как правило, используются для повышения производительности, поэтому их можно изменять.
Например, ваш циклический граф может быть представлен как:
> Map[1, 2; 2, 3; 3, 4; 4, 1];;
val it : Map<int,int> = map [(1, 2); (2, 3); (3, 4); (4, 1)]
Способ представления графа в F # состоит в том, чтобы хранить словарь, который отображается из маркеров в вершины и, при необходимости, другой для ребер.Этот подход намного легче отладить, потому что вы пересекаете косвенную рекурсию через таблицы поиска, которые понятны, а не пытаетесь расшифровать граф в куче.Однако, если вы хотите, чтобы сборщик мусора собирал недостижимые для вас подграфы, тогда чисто функциональная альтернатива слабой хэш-карте, очевидно, является нерешенной проблемой в информатике.