Представление дерева в F #

Я пытаюсь реализовать дерево на 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'

Можно ли что-то сделать вроде этого или нет поддержки для рекурсивного списка таких кортежей?

9
задан ildjarn 17 June 2011 в 20:26
поделиться