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