Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[42]

(define wave2

(beside wave (flip-vert wave)))

(define wave4

(below wave2 wave2))

Рис. 2.12: Построение составного изображения, начиная с рисовалки wave с рисунка 2.10

На картинке 2.12 показан результат работы рисовалки, называемой wave4, который строится в два этапа, начиная с wave:

(define wave2 (beside wave (flip-vert wave))) (define wave4 (below wave2 wave2))

Строя таким образом составные рисовалки, мы используем тот факт, что рисо-валки замкнуты относительно средств комбинирования нашего языка. Beside или below от двух рисовалок само является рисовалкой; следовательно, мы можем ее использовать как элемент при построении еще более сложных рисова-лок. Так же, как при построении списковых структур с помощью cons, замкнутость наших данных относительно средств комбинирования служит основой способности строить сложные структуры при помощи всего лишь нескольких

Раз мы можем комбинировать рисовалки, нам хотелось бы уметь выделять типичные схемы их комбинирования. Операции над рисовалками мы реализуем как процедуры языка Scheme. Это означает, что нам в языке изображений не требуется специального механизма абстракции: поскольку средства комбинирования являются обычными процедурами Scheme, у нас автоматически есть право делать с операциями над рисовалками все то, что мы можем делать с процедурами. Например, схему построения wave4 мы можем абстрагировать в

(define (flipped-pairs painter)

(let ((painter2 (beside painter (flip-vert painter)))) (below painter2 painter2)))

и определить wave4 как пример применения этой схемы:

(define wave4 (flipped-pairs wave))

операций.

виде


right-split

ге-1

identity

right-split

ге-1

right-split n

Рис. 2.13: Рекурсивные планы

up-split ге-1

up-split re-1

corner-split re-1

identity

right-split re-1

right-split re-1

corner-split n

right-split и corner-split.

Мы можем определять и рекурсивные операции. Вот пример, который заставляет рисовалки делиться и ветвиться направо, как показано на рисунках 2.13 и 2.14:

(define (right-split painter n)

(if (= n 0)

painter

(let ((smaller (right-split painter (- n 1)))) (beside painter (below smaller smaller)))))

Можно порождать сбалансированные узоры, наращивая их не только направо, но и вверх (см. упражнение 2.44 и рисунки 2.13 и 2.14):

(define (corner-split painter n)

(if (= n 0)

painter

(let ((up (up-split painter (- n 1)))

(right (right-split painter (- n 1)))) (let ((top-left (beside up up))

(bottom-right (below right right)) (corner (corner-split painter (- n 1)))) (beside (below painter top-left)

(below bottom-right corner))))))

Соответствующим образом расположив четыре копии corner-split, мы получаем схему под названием square-limit, применение которой к wave и rogers показано на рисунке 2.9:

(define (square-limit painter n)

(let ((quarter (corner-split painter n)))

(let ((half (beside (flip-horiz quarter) quarter)))

(below (flip-vert half) half))))

Упражнение 2.44.

Определите процедуру up-split, которую использует corner-split. Она подобна right-split, но только меняет местами роли below и beside.


(right-split wave 4)(right-split rogers 4)

(corner-split wave 4)(corner-split rogers 4)

Рис. 2.14: Рекурсивные операции right-split и corner-split в применении к рисовалкам wave и rogers. Комбинирование четырех картинок corner-split дает симметричные узоры square-limit, как показано на рисунке 2.9.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196]