A Node
плохо сформирован, если он содержит более одного элемента с одинаковым именем, или если это относится к любому из поддеревьев, которые он содержит.В частности, Node []
правильно сформирован.Такими понятиями могут быть случаи, когда рекурсивная функция functionWF
:
let rec functionWF (tree : FsTree) : bool =
match tree with
| Node [] -> true
| Node list ->
let strings = List.map fst list
let trees = List.map snd list
let namesOk = allElementsUnique strings
let subtreeOk state tree = state && (functionWF tree)
List.fold subtreeOk namesOk trees
, где allElementsUnique
- это функция, которая гарантирует, что в списке нет повторяющихся элементов.
Я неЯ не понимаю, что вы имеете в виду, что functionPath
должен делать.
PS.Ваш пример FsTree
недопустим, он должен иметь Node
вне списка:
let fsT = Node [("f1", Node [("f2", Node [])]); ("f3", Node [])]