ヒマをみつけてWeb開発
その場の思い付きを、ヒマをみつけてWebサイトにしてみるブログ

Script-Fuを使うために最低限覚えるべきSchemeの文法

Sunday, 18 February 2007 15:54 by sabro

Schemeを、少しずつ勉強中。何とかScript-Fuを作れそうなところまで来たので、一度まとめておきます。

1.何はともあれ、()をつける

とにかく、ソースコードに「( )」が出てきます。ファイルから、画像をロードするだけで、以下みたいな感じになります。

(set! image (car (gimp-file-load 0 filename filename)))
2.前置記法

数式は、( 1 + 2 ) ではなく、( + 1 2 ) と書きます。
( 1 + 2 + 3 ) は、( + 1 2 3 ) 。
( 1 + 2 - 3 ) は、( - ( + 1 2 ) 3 ) です。

3.大域変数と局所変数

大域変数(グローバル変数)の宣言は、defineで行い、set!で値を代入します。 ただし、Script-Fuでは、変数宣言をとばして、いきなりset!を実行しても、変数を使えるようです。

(define x 1)1(print x)1(set! x 2)2(print x)2(set! y 3)3(print y)3

 局所変数(ローカル変数)は、(let* )で囲んで、宣言します。囲まれた領域以外で使用すると、エラーになります。(let* )内には、変数だけでなく、変数を使用する評価式も書いてしまいます。

「(let* ((変数1)(変数2)・・・)(評価式1)(評価式2))」

以下では、zという変数を初期値3で定義し、評価式はzそのものを返しています。(let* )の外で、zを使おうとすると、変数未定義エラーになります。

(let* ((z 3)) z)3(print z)ERROR: unbound variable (errobj z)
4.リスト、つまりは配列のようなもの

他の言語でいうところの配列は、Schemeではリストに当たります。()の前に、「’」を付けることで宣言できます。

'( 1 2 3 )'( 1 "two" 3 )  ←数値と文字列が混ざってもOK

リストから、値を取得するときは、「car」「cdr」を使います。「car」は、リストの先頭の要素を取得します。「cdr」を使うと、リストの先頭を除いた全ての要素を取得します。

(car '(1 2 3))1(cdr '(1 2 3))(2 3)

 いまいち使いにくい感じがしますが、関数型言語は、再帰処理を頻繁に利用するので、このような仕様になっているんだと思います。ちなみに、Gimpの関数は、全てリストを返すので、戻り値の取得は、たいていの場合、「car」を使う必要があります。

5.関数の定義

Schemeでは、変数と関数が同列で扱われます。なので、関数の宣言は、大域変数と同じくdefineで行います。以下では、引数「x,y」を足し算する関数「add」を宣言し、その関数を利用しています。

(define (add x y) (+ x y))(add 1 3)4

やれやれ、オブジェクト指向言語とは、マッタク違いますな( ̄~ ̄;)
参考サイトとしては、もうひとつのScheme入門がオススメです。
Tags:   , ,
Categories:   WebDesign
Actions:   Permalink | Comments (39) | Comment RSSRSS comment feed