Решение упражнения 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 по определению рисует изображение первого аргумента под изображением второго, а не над ним (что, на мой взгляд, было бы логичнее). Но это вопрос договоренностей, на котором нет смысла слишком сильно концентрироваться.

Comments

Comment from hi-artem
Date: February 18, 2015, 8:55 pm

Мне сначала тоже показалось не логично, но по аналогии:
(> А В) значит, что А больше В
(below А В) ===> А ниже В, что есть вполне логично :-)

Write a comment