Я пытаюсь реализовать дерево на F #, используя список кортежей.
[a]
где a
= (строка, [a])
Каждый узел имеет список своих дочерних узлов, а конечные узлы будут (имя, [])
Я хочу иметь возможность рекурсивно перебирать каждый уровень списка, как этот.
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) список
, но с заданным
'b list
Результирующий тип будет бесконечным при объединении' 'a'
и'' b * 'a list'
Можно ли что-то сделать вроде этого или нет поддержки для рекурсивного списка таких кортежей?