SICP §2.2.4(図形言語 その5 [高階関数としてのペインタの扱い])

次の「高階関数」のサブセクションでは、「ペインタが手続だからできること」を解説してる風。

;四種類の「ペインタを生成する手続き」を引数で受け取って、
;左上、左下、右上、右下に描画行うペインタの生成手続きを返却する。
;(その手続は、引数として「基本となるペインタ」を1つ受け取る。)
(define (square-of-four tl tr bl br)
  (lambda (painter)
    (let ((top (beside (tl painter) (tr painter)))
	  (bottom (beside (bl painter) (br painter))))
      (below bottom top))))

;square-of-four を使って、flipped-pairs を再定義してみる。
;(※square-of-four の第1引数と第3引数の identity は、
;  多分受け取ったペインタをそのまま返却する手続な気がする。)
(define (flipped-pairs painter)
  (let ((combine4 (square-of-four identity flip-vert
				  identity flip-vert)))
    (combine4 (corner-split painter n))))

;square-of-four を使って、square-limit を再定義してみる。
;rotate180 は多分180度回転させる手続。今んとこ未定義。
(define (square-limit painter n)
  (let ((combine4 (square-of-four flip-horiz identity
				  rotate180 flip-vert)))
    (combine4 (corner-split painter n))))

疑問点

今回の箇所での疑問点は、単純に定義のない手続がでてきただけだな。


・identity 手続の定義がない。
・rotate180 手続の定義がない。
後の「問題」で自分たちで定義するんかねぇ?


続いて「問題 2.45」があり、その後『フレーム』に関するサブセクションが始まる。