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