3. Script-Fu 作成演習

この訓練過程は Script-Fu を扱う上で必須の Scheme 言語の基礎を身につけ、 例題で便利なスクリプトを書いて道具箱に収めるまでを修めていただきます。 例題のスクリプトはユーザーに語句の入力を促し、 そのテキストの大きさにぴったり合う画像を新たに作成します。 つづいてテキストまわりに余裕をもたせる空隙をつくれるようにスクリプトを改造します。 少しずつ Script-Fu の知識が身につくよう、 ここでとりあげる議題は最小限にとどめることにしました。

[注記] 注記

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. Scheme に精通

3.1.1. Scheme をはじめよう

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

最もはじめに学んでほしいことは、

Scheme 言語ではどんな構文も丸括弧 () でくくられること

そのつぎに覚えてほしいことは、

関数名や演算子は常に括弧内の先頭に置かれ、 つづくパラメーターがその関数や演算子に渡されること

です。 もちろん括弧でくくられるのは関数だけにとどまりません。 リストと呼ばれる一連の項目の羅列も括弧でくくります。 これについてはあとで触れます。 Scheme は前置記法の規則にしたがい関数が式の最初に来ます。 後置記法に馴染みのある方や HP 社製のほとんどの種類の電卓のような逆ポーランド記法の電卓をお持ちの方にとっては Scheme で式を書けるようになるのに問題はないはずです。

3 つ目にご理解いただきたいことは、

算数で使われている演算子も関数の一種とみなされており、 数式を書くときその最初に置かなくてはならないこと

です。 こちらの規則は前置記法の考え方がわかればすんなり理解できると思います。

3.1.2. 前置記法と中置記法と後置記法のそれぞれの例

この例は 前置中置後置 のそれぞれの記法の違いをかいつまんで際立たせてみました。 単純な 1 に 23 を足す計算をしています。

  • 前置記法では + 1 23 と書きます。 Scheme言語はこの方式です。

  • 中置記法では 1 + 23 と書きます。 普通の書きかたです。

  • 後置記法では 1 23 + と書きます。 多数の HP 社製電卓がこの方式です。 [1 と 23 とを 足す という日本語文によく馴染む記法です。]

3.1.3. Scheme の練習

では早速学んだことを練習してみましょう。 まだ GIMP が動いていなければ立て上げます。 そして画像ウィンドウのメニューから フィルターScript-FuScript-Fu コンソール と進んでいただくとScript-Fu コンソールを開きます。 これは Scheme 言語を対話的に作動させる目的で作られた機能です。 間も無く Script-Fu コンソール が現れます。

3.1.4. Script-Fu コンソールのウィンドウ

ウィンドウの下部にある一行記入欄はかつて 現在のコマンド とタイトルがついていました。 このコンソールで Scheme の単純なコマンドが対話的に試せます。 まずは気楽に括弧から書きはじめ、 数字を加えてみます。

(+ 3 5)

このように記入したら Enter を押して送ると期待通りの 8 という答えが中央のウィンドウに表示されます。

図13.1 Script-Fu コンソールを使う

Script-Fu コンソールを使う

ではもっとたくさんの数値を合算させたいときはどうすればよいのでしょう。 +の機能は 2 つ以上の引数を渡せるのでこれは難しくありません。

(+ 3 5 6)

この式も期待通りの答えとなる 14 を返します。

ここまではよろしいですか。 Scheme 構文をScript-Fu コンソールで実行すれば直ちに答えが返されます。 ではここで注意を申し上げます。

3.1.5. 余計な括弧に注意しよう

複雑な数式を書くときも読むときもその構成をはっきりさせる目的で部分ごとに括弧をつけることを私などはよくやりますが、 そういう人はどこでも好きなところに括弧をつけ足す習慣がついています。 ところが Scheme ではそういった余分な括弧を書かないよう気をつけねばなりません。 たとえばもし 5 たす 6 の結果に 3 [や 7] を足そうとしたら普通はこんな風に書くでしょう。

3 + (5 + 6) + 7 = ?

前置記法は+記号を数値の羅列の先頭に置くのですから、 書き直せばつぎのようにするのではないでしょうか。

(+ 3 (5 6) 7)

でもこれは間違いです。 Scheme の構文はいずれも丸括弧ではじまり丸括弧で終わることを思い出してください。 Scheme のインタープリターは 2 つめの括弧に出会ったときに括弧内の数値を足すのではなく先頭の5という関数で始まる式の答えを出して 3 に足そうとします。

正しい記法はつぎのようにします。

(+ 3 (+ 5 6) 7)

3.1.6. 空白も適切に入れるよう気をつけよう

C/C++ や Perl や Java のような他のプログラミング言語に慣れ親しんだ人なら演算子の周囲に空白をどう置くか注意しなくても数式は適切に書けると思っているはずです。

        3+5, 3 +5, 3+ 5
      

C/C++ と Perl と Java のコンパイラーは上の数式のいずれも受け入れます。 ところが同じ規則が Scheme には通用しません。 Scheme では数式記号や関数名や演算子のあとに空白を置かなければ Scheme インタープリターに正しく解釈してもらえません。

Script-Fu コンソールを使ってもうすこしの間簡単な数式で練習を積み、 以上の基本的な構えにすっかり慣れるようにしてください。