matt.might.net/articles/parsing-with-derivatives

я есть запись:

type node = {
               content : string;
               parent : node option;
               branch : string option;
               children : seq<node> option;
            }

Который я хочу создать таким образом:

let rec treeHead = {
                       content = "Value"
                       parent = None;
                       branch = None;
                       children = tree (Some(treeHead)) rows;
                   };

куда

let rec tree (parent:node option) (rows:seq<CsvRow>) :seq<node> option

Это рекурсивная функция, которая получает дочерние элементы узла (для построения дерева). Итак, как вы можете видеть, объект treeHead должен вызывать себя через функцию дерева.

Я хочу использовать этот способ, чтобы избежать использования treeHead в качестве изменяемого значения и после этого изменять его дочернее свойство.

Мой вопрос заключается в том, что treeHead вызывает ошибку и предупреждение. Ошибка говорит:

Значение treeHead будет оцениваться как часть его собственного определения.

И предупреждение говорит:

Эта и другие рекурсивные ссылки на определяемый объект (ы) будут проверены на предмет правильности инициализации во время выполнения посредством использования отложенной ссылки. Это потому, что вы определяете один или несколько рекурсивных объектов, а не рекурсивные функции. Это предупреждение может быть подавлено с помощью «#nowarn« 40 »или« --nowarn: 40 ».

Во-первых, я делаю это правильно (я имею в виду, не учитывая изменчивый выбор)? И как мне это исправить.

Ответы на вопрос(1)

Ваш ответ на вопрос