Решение упражнения 2.44 из SICP
Процедура up-split очень похожа на приводящуюся в книге right-split. Если right-split оставляет в левой части рамки старую рисовалку (ох и перевод!), а правую делит на две расположенные одна под другой части и вызывает себя для них рекурсивно, то up-split оставляет старую рисовалку в нижней половине рамки, а верхнюю делит на две части, расположенные рядом по горизонтали, и вновь вызывает себя рекурсивно.
Таким образом определение для процедуры up-split записывается таким образом:
(define (up-split painter n) (if (= n 0) painter (let ((smaller (up-split painter (- n 1)))) (below painter (beside smaller smaller)))))
Сохранена полная аналогия с определением right-split.
Если быть откровенным, мне не совсем очевидно, почему результат операции below по определению рисует изображение первого аргумента под изображением второго, а не над ним (что, на мой взгляд, было бы логичнее). Но это вопрос договоренностей, на котором нет смысла слишком сильно концентрироваться.
Write a comment