2016-11-15 6 views
1

Скажем, у меня есть следующий тип данных дерево:Как получить значения внутри переменной типа данных?

datatype 'a tree = Empty | Node of 'a * 'a tree * 'a tree; 
val x = Node(10, Node(20, Empty, Empty), Node(30, Empty, Empty)); 

Здесь х является переменной типа INT дерева. Я хочу знать, как я могу анализировать и оценивать разные части дерева, только переменная x?

Например, в этой функции:

fun add(tree) = .... 
add(x); 

Say функция добавляет все значения в узлах дерева, как бы я точно захватить эти ценности? Я знаю для кортежей, которые вы можете просто сделать:

#i(x, y, z, ......) 

Чтобы захватить элемент в i-м индексе. Как этот тип функциональности работает с рекурсивными типами данных?

ответ

1

Чтобы получить значения из рекурсивного типа данных, вы можете просто написать для него рекурсивную функцию.

fun getValues(Node(v,l,r) : 'a tree) : 'a list = getValues(l) @ [v] @ getValues(r) 
    | getValues(Empty) = []