Я пытаюсь реализовать дерево в F #, используя список кортежей.
[a]
, где a
= (string, [a])
У каждого узла есть список своих дочерних элементов, и конечные узлы будут (name, [])
Я хочу иметь возможность рекурсивно перебирать каждый уровень списка следующим образом.
a
b e
c d f g
Однако они не всегда будут двоичными деревьями.
let t2 = [("a", [("b", [("c", []), ("d", [])]), ("e", [("f", []), ("g", [])])])]
let rec checkstuff tple =
match tple with
| (_, []) -> true
| (node, children) ->
List.fold ( || ) false (List.map checkstuff children)
Я получаю:
Несоответствие типов.Ожидается
('a * 'b list) list
, но с учетом
'b list
Результирующий тип будет бесконечным при объединении ''a'
и ''b * 'a list'
Есть ликак я могу сделать что-то вроде этого или нет поддержки рекурсивного списка кортежей, как это?