CPS для свертки n-арного дерева
От: Mangar http://skiminog.livejournal.com
Дата: 02.02.10 20:43
Оценка:
День добрый всем.

Есть у меня тип n-арного дерева, определенным следующим образом:
type 'a Tree =
    | Node of 'a * 'a Tree seq
    | Leaf of 'a


И захотелось мне написать для него функцию свертки. Родилось нечто следующее:
let rec fold procLeaf procNode = function
    | Leaf(x) -> procLeaf x
    | Node(x, children) -> children |> Seq.map (fold procLeaf procNode) |> procNode x


А теперь возник вопрос. Как сделать эту функцию хвостово-рекурсивной с помощью CPS? Если бы ветвей было наперед известное конечное число, я процесс представляю, но вот как вывести такую большую-большую лямбду из n вложенных вызовов fold', а потом еще и все аргументы из всех лямбд передать последовательностью в procNode — ума не приложу.

Заранее благодарен за помощь.
f# функциональное программирование свертка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.