F# - дерево

 
0
 
Functional languages
ava
polakrez | 17.12.2011, 22:47
Здравствуйте!

Имеется такое задание:
Определить число вершин дерева, степень которых совпадает со значением элемента.

Начало стандартное:

open System

type 'T tree =
    Leaf of 'T
    | Node of 'T*('T tree list)


let treee = Node(3,[Node(2,[Leaf(0)]);Node(3,[Leaf(6);Leaf(7)]);Leaf(4)])

let rec iter f = function
    Leaf(T) -> f T
    | Node(T,L) -> (f T; for t in L do iter f t done)

let iterh f =
    let rec itr n = function
        Leaf(T) -> f n T
        | Node(T,L) -> (f n T; for t in L do itr (n+1) t done) in
    itr 0

Далее:

let cou = 0
let count tr =
    match tr with
    Leaf(T) -> match T with
                0 -> (*acc cou*) printf "aa"
    | Node(T,L) -> match (T - List.length L) with
                    0 -> (*acc cou*) printf "aa"

let rec summT tree =
    match tree with
    Leaf(T) -> count Leaf(T)
    | Node(T,L) -> (count Node(T,L); for t in L do summT t done)

Этот цикл for не работает из-за несоответствия типов.

Как решить данную проблему? Как и где сделать цикл?

Буду благодарна за ответы.
Comments (1)
ava
k0rvin | 20.12.2011, 11:33 #
попробуйте прописать типы функций явно, тогда все станет понятней
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit