プログラム表現の本質(顔を描くプログラムから)



年配の方はどこかで見たことがある絵だと思われたかもしれません。
昔、日経さんが企業の成績を人の顔に見立てる「NEEDS FACE」(綴りが違うかもしれません)という手法を使われていていました。グラフィックを使うサンプルプログラムとして面白いと思ったので、よく似た絵を使うことを日経さんから許諾を得て作成し「Mind」という日本語プログラミング言語の初版(1985年)を出す時にこのサンプルプログラムをパッケージに含めました。

本家さんと同じようにポイントはパラメータによって顔が変化する点です。目の傾きと口の上げ下げを変化させられ、これにより「元気な顔」と「困った顔」の2種を描画しています。

さて、仕掛けや見栄えは後回しにしてプログラムの上位部は以下のようになっています。

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
~前半略~

顔全体をかくとは
    顔の下地をかき
    目をかき 眉をかき 鼻をかき 口をかくこと。

メインとは
    キャンバスを設置処理し
    既定値設定し
    顔位置を左に設定し 元気な顔を設定し 顔全体をかく
    顔位置を右に設定し 困った顔を設定し 顔全体をかくこと。
\___________________________/

Mindをまったく知らない方でも、上のプログラムを見ればこれが何をしようとしているかお分かりになるかと思います。
一般的なプログラム(コードと言わずにあえてプログラムと言います)の表記とは違うなと、あるいは「これプログラムなの?」と思われるかもしれません。

他方、一般的なプログラムでは日本語ではなく英字が使われています(あえて「英語で」とは言いません)、ほかに記号が多く使われます。( ) とか ; とか { } などの記号です。

上のMindのプログラムではそれらすべて登場しないことで「プログラムのように見えない」のですが、これで正しく動作するなら一般的なプログラミング言語で多用される記号のようなものはプログラムの本質ではない(本当はプログラムとしては必要ない)ことが分かっていただけると思います。

私の考える「プログラム」の定義は「コンピュータへの指示を文字として表したもの」です。上記はその通りになっています。プログラムって本質を突き詰めればこんなもので、あまり大上段に構える必要は無いのですね。

後になりましたがプログラムの説明をします。

大昔のMind初版(PC-9801用のグラフィック用)用に書かれたものをMind9(Mind Version 9)向け修正したものです。

顔の輪郭(下地)は2つの円を重ねて表現します。旧プログラムはタイル機能を使って疑似的に肌色を出していましたが今やその必要は無いので直接に肌色を使って塗りつぶします。
目は、眉と目本体に分かれます。
眉は直線を傾けて描きます。外付けの図形回転ライブラリを使っています。
目本体のうち白目部分は同じ座標回転で斜めの楕円を描いています。黒目は円なので回転しても同じなので変化させる必要はありません。
口は円弧を使いますが、中心点を口の上に置くか下に置くかで変化させています。

元気な顔と困った顔(face2.src を表示するhtmlページ、別ウィンドウ)

座標回転の拡張ライブラリ(rotate.src を表示するhtmlページ、別ウィンドウ)

--------------------
Mindのホームページ:
日本語プログラミング言語 Mind
Mind ダウンロードページ
--------------------