я что-то не осилил с ходу в твоём коде разобраться, но кажется, что чего-то вроде map-tree или walk-tree реализованных как-то
так должно хватить за глаза. ну уверен, на сколько тут могут помочь хэлперы - вроде и так достаточно тривиальный код. walk тут кажется можно использовать только после предварительной обработки, для которой всё равно понадобится что-то вроде тех же хэлперов, а с zip я не работал, но сходу кажется, что это немного перебор