Re[2]: CPS для свертки n-арного дерева
От: Mangar http://skiminog.livejournal.com
Дата: 03.02.10 05:02
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>А что меняется от того, что их число неизвестно? Ты же проходишь по ним через map.

MC>Перепиши с map на велосипедную функцию — и все встанет на свои места.

Меняется то, что, когда я вызываю i-го потомка, мне надо передать в него функцию континуации, которая состоит из вложенных лямбд с параметрами от i-го до n-го и вызовов от (i+1)-го до n-го, а в самой глубине собрать все аргументы всех лямбд в одну последовательность (seq), и передать ее в функцию обработки вершины.
Я что-то как-то не въезжаю, как подобное выглядит.

MC>Другое дело, что от переписывания в cps обход дерева может и не стать оптимальнее. Я не силен в твоем языке и не знаю, есть ли там такое понятие как stack overflow, но если нет — то контекст выполнения (либо объем съеденного стека, либо размер континуации) и так и так будет расти при спуске вниз по дереву и уменьшаться при подъеме вверх.


Это F#. Да, stack overflow в нем есть. Именно поэтому я и хочу переписать все это дело на CPS — перетянуть все в кучу. Я прекрасно понимаю, что я просто эмулирую стек в куче этими континуациями, и что ее объем в памяти наростает по мере погружения. Но вот переполнения стека не будет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.