
この図はContext Freeという言語のサンプルのひとつで作られたもの。文脈自由言語という名前の通り、文脈自由な規則を書くことで絵を作ることができる。
プログラムを見て、たぶんこうだろうという解説。マニュアルは全く読んでないので、間違ってるかもしれないけど、まあ、たぶんこういうことでしょう。
startshape WHOLE
で開始記号を設定。
rule WHOLE {
QUAD { x -0.5 y -0.5 }
QUAD { x 0.5 y -0.5 }
QUAD { x 0.5 y 0.5 }
QUAD { x -0.5 y 0.5 }
}
ruleでWHOLE -> QUAD QUAD QUAD QUAD と指定したのと同じ。ただし、呼び出す際にxとyをそれぞれ変更している。
面白いのはここからで、
rule QUAD {
FILL { }
}
QUADはFILLだと。ここでFILLは後で定義されているが、単に四角を書いているだけ。これだけだと、画面に4つ四角が表示されて終わるだけなんだけど、さらに
rule QUAD 5 {
WHOLE { size 0.45 r 2 }
}
と定義されている。つまり、最初のQUADかこのQUADのどちらかが選ばれる。そのための条件はない(文脈自由だから)。そして、こっちのQUADはWHOLEだと定義されているので、再帰的な定義になっていることが分かる。さらに、もう一つ、
rule QUAD 0.5 {
// nothing
}
と定義されていて、何も表示しない場合もある。ここで、5とか0.5とQUADの後ろに書いてある。これは各ルールが選択される比率を表している。何も書かないと1。この場合は1:5:0.5ということで、分かりやすい比に直すと、2:10:1の比率で各ルールが選ばれる。
最後に、FILLを定義しておしまい。SQUAREは組み込みでしょう。
rule FILL {
SQUARE {
size 0.8
}
}
0 件のコメント:
コメントを投稿