Это вопрос, который расширяет проверку рекурсивного дерева F#, на который я вчера хорошо ответил.
Этот вопрос касается вставки дочернего элемента в существующее дерево. Это обновленный тип, который я хотел бы использовать:
type Name = string
type BirthYear = int
type FamilyTree = Person of Name * BirthYear * Children
and Children = FamilyTree list
Мой последний вопрос касался проверки достоверности дерева, это было решение, которое я решил использовать:
let rec checkAges minBirth = function
| Person(_,b,_) :: t -> b >= minBirth && checkAges b t
| [] -> true
let rec validate (Person(_,b,c)) =
List.forall isWF c && checkAges (b + 16) c
Теперь я хотел бы иметь возможность вставить человека Simon в качестве дочернего элемента определенного человека Hans в следующей форме
insertChildOf "Hans" simon:Person casperFamily:FamilyTree;;
Таким образом, входными данными должны быть имя родителя, ребенка и генеалогическое древо. В идеале он должен возвращать измененное генеалогическое древо, то есть параметр FamilyTree.
То, с чем я борюсь, - это включить функцию проверки, чтобы убедиться, что она законна, и способ правильно вставить ее в список дочерних элементов, если вставка Person уже является родителем - возможно, как отдельная функция.
Любая помощь приветствуется и очень ценится - спасибо! :)