2.2.4 図形言語

色々故がございまして、再読。stratifed design なんてのは tcp/ip とか linux kernel とかな例があるようにプログラマが好きなナニ。
この節でもいっちゃんてっぺんの抽象的な部分から切り出していきつつ下の層の実装に向かってて、インターフェースでプログラムする昨今の手法がこんな昔から紹介されてたりなんかして興味深い。
最初に抽象的な概念としての painter が出てくる。

  • painter は手続き
  • 実際の形は frame に依存
    • painter は frame を受け取って描画
  • painter を受けとって新しい painter を構成する手続き
    • beside は二つ painter を受け取って左右にそれぞれ描画
    • below は二つ painter を受け取って上下にそれぞれ描画
    • flip-vert は受け取った painter の上下を逆転させた画像を描画
    • flip-horiz は左右逆転

それぞれは描画、って書いてますが painter 手続き、というのがポイント。この手続きは上記の通り、frame というこの時点では抽象的な概念を引数に取る。
書いてある事は凄く格好良いんですが、試験が云々、という事になってくると話が微妙ッス。試験、というのはある意味具体的な概念なので。
例えば wave という painter が出てくるんですが、これを拡張して wave2 とか wave4 とかいう painter が出てきます。

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

painter つってるけど、これって i/f だよな。ん、i/f ?
今、単体試験が云々ってわしも面白いな、って思ってるんですが、i/f でプログラムを作ってく最近の流行りの中で、interface を試験するのはやっぱ机上なのかな。

  • flip-vert は painter を引数に painter を戻す
  • beside は painter を二つ引数に取って painter を戻す
  • below も painter を二つ引数に取って painter を戻す

このあたりをどう応用するか、が課題なんですがどうしたものやら。(略し杉