Решение упражнения 2.44 из SICP

4 February, 2008 (20:19) | Решения упражнений

Процедура 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