この訓練過程は Script-Fu を扱う上で必須の Scheme 言語の基礎を身につけ、 例題で便利なスクリプトを書いて道具箱に収めるまでを修めていただきます。 例題のスクリプトはユーザに語句の入力を促し、 そのテキストの大きさにぴったり合う画像を新たに作成します。 つづいてテキストまわりに余裕をもたせる空隙をつくれるようにスクリプトを改造します。 少しずつ Script-Fu の知識が身につくよう、 ここでとりあげる議題は最小限にとどめることにしました。
注記 | |
---|---|
この節は GIMP 1 用のユーザーマニュアルに掲載されたマイク・テリー氏著の演習 (日本語訳は マイク・テリーのScript-Fu黒帯道場) を再編成したものです。 |
最もはじめに学んでほしいことは、
Scheme言語ではどんな構文も丸括弧 () でくくられること
そのつぎに覚えてほしいことは、
関数名や演算子は常に括弧内の先頭に置かれ、 つづくパラメータがその関数や演算子に渡されること
です。 もちろん括弧でくくられるのは関数だけにとどまりません。 リストと呼ばれる一連の項目の羅列も括弧でくくります。 これについてはあとで触れます。 Scheme は前置記法の規則にしたがい関数が式の最初に来ます。 後置記法に馴染みのある方やHP社製のほとんどの種類の電卓のような逆ポーランド記法の電卓をお持ちの方にとっては Scheme で式を書けるようになるのに問題はないはずです。
3つ目にご理解いただきたいことは、
算数で使われている演算子も関数の一種とみなされており、 数式を書くときその最初に置かなくてはならないこと
です。 こちらの規則は前置記法の考え方がわかればすんなり理解できると思います。
この例は 前置、 中置、 後置 のそれぞれの記法の違いをかいつまんで際立たせてみました。 単純な 1 に 23 を足す計算をしています。
前置記法では + 1 23
と書きます。 Scheme言語はこの方式です。
中置記法では 1 + 23
と書きます。 「普通」の書きかたです。
後置記法では 1 23 +
と書きます。 多数のHP社製電卓がこの方式です。 [1 に 23 を 足す という日本語文によく馴染む記法です。]
では早速学んだことを練習してみましょう。 まだGIMPが動いていなければ立て上げます。 そして画像ウィンドウのメニューから 「Script-Fu コンソール」が開きます。 これは Scheme 言語を対話的に作動させる目的で作られた機能です。 間も無く「Script-Fu コンソール」が現れます。
→ → と進んでいただくとウィンドウの下部にある一行記入欄はかつて 現在のコマンド とタイトルがついていました。 このコンソールで Scheme の単純なコマンドが対話的に試せます。 まずは気楽に括弧から書きはじめ、 数字を加えてみます。
(+ 3 5)
このように記入したら Enter を押して送ると期待通りの8という答えが中央のウィンドウに表示されます。
ではもっとたくさんの数値を合算させたいときはどうすればよいのでしょう。 「+」の機能は2つ以上の引数を渡せるのでこれは難しくありません。
(+ 3 5 6)
この式も期待通りの答えとなる14を返します。
ここまではよろしいですか。 Scheme 構文を「Script-Fuコンソール」で実行すれば直ちに答えが返されます。 ではここで注意を申し上げます。
複雑な数式を書くときも読むときもその構成をはっきりさせる目的で部分ごとに括弧をつけることを私などはよくやりますが、 そういう人はどこでも好きなところに括弧をつけ足す習慣がついています。 ところが Scheme ではそういった余分な括弧を書かないよう気をつけねばなりません。 例えばもし5たす6の結果に3[や7]を足そうとしたら普通はこんな風に書くでしょう。
3 + (5 + 6) + 7 = ?
前置記法は「+」記号を数値の羅列の先頭に置くのですから、 書き直せばつぎのようにするのではないでしょうか。
(+ 3 (5 6) 7)
でもこれは間違いです。 Scheme の構文はいずれも丸括弧ではじまり丸括弧で終わることを思い出してください。 Scheme のインタープリタは2つめの括弧に出会ったときに括弧内の数値を足すのではなく先頭の「5」という関数で始まる式の答えを出して3に足そうとします。
正しい記法はつぎのようにします。
(+ 3 (+ 5 6) 7)
C/C++ や Perl や Java のような他のプログラミング言語に慣れ親しんだ人なら演算子の周囲に空白をどう置くか注意しなくても数式は適切に書けると思っているはずです。
3+5, 3 +5, 3+ 5
C/C++ と Perl と Java のコンパイラは上の数式のいずれも受け入れます。 ところが同じ規則が Scheme には通用しません。 Scheme では数式記号や関数名や演算子のあとに空白を置かなければ Scheme インタープリタに正しく解釈してもらえません。
Script-Fu コンソールを使ってもうすこしの間簡単な数式で練習を積み、 以上の基本的な構えにすっかり慣れるようにしてください。