Вот есть код:
(let ((some (trick 'construct)))
(if (very-bad? some)
(trick 'good-bye)
(progn (when (bad? some)
(setf some
(trick 'fix some)))
(trick 'show some))))
В данный момент код в теле функций и форма с trick - вызов функции с созданием gtk окна, работой в этом окне, закрытием и, уже после, trick возвращает значение.
Сейчас вот думаю чтобы проделать всё в рамках одного создания-закрытия окна. Как всем известно, что таким образом с gtk в теле функции может быть что-то типа такого:
(low-level-init-gtk)
(let ((window (build-...)))
;; Здесь создаём объекты и рассовываем лямбды для отрисовки
;; и обработки событий
...
;; ииии
(gtk-main-loop))
Ещё хочу это обернуть в unwind-protect чтобы высвобождать систему звука, например. Тут уже мало того формы с trick перестают быть просто вызовами функций, так вообще всю логику из первого куска кода нужно раздробить и размазать по обработчикам. Без этого только продолжения использовать? Или есть другие практики описания такой логики?