PR

超!Gauche入門

2008年5月23日(金)
吉田 裕美

簡単なプログラムを書いてみよう!

 Gauche(Lisp/Scheme)はとてもシンプルなプログラミング言語です。まずは乱数を使いジャンケンの手(Guu、Choki、Pa)を表示するプログラムを書いてみましょう。リスト1は比較ためにJavaで同じプログラムを書いたものです。リスト2がGaucheのプログラムです。

Gaucheの文法

まずは、Gaucheのプログラムの文法を簡単に説明していきましょう。

 数値0.33や文字列"Guu"はJavaと同じくリテラルです。()で括られたものは式で、カッコの中の最初の要素は関数名、それ以外は関数への引数になります。

 (
 また、;からはじまる行はコメントになります。ではリスト2のプログラムについて上から解説していきましょう。

 2行目はsrfi-27という乱数のライブラリを読み込んでいます。4~7行目はguu-choki-paという名前の関数を定義しています、1つの引数を取ります。define は関数や定数を定義するための関数です。

 5~7行目は条件によって処理を行うcond関数でJavaのif then else if ... elseに相当します。defineやcond関数は厳密にいうと関数ではなくスペシャルフォームです。

 5行目の
 6行目はrが0.66より小さければ"Choki"という値をcond関数の値とし、以降(7行目)は実行しません。

 7行目はelseがあるのでcondの終わりで"Paa"という値をcond関数の値とします。

 9~10行目はjyankenという名前の関数を定義しています。引数はありません。

 10行目は0~1の間の乱数を戻す(random-real)を呼び出し、その値をguu-choki-pa関数に渡し、結果をprint関数で表示しています。

 12行目はdotimes関数でjyanken関数の呼び出しを10回繰り返しています(ここでは使っていませんが、回数を数える変数はiです)。この、dotimes関数も厳密には関数ではなく、マクロとなります。

 どうだったでしょうか? Javaと比べると短く、シンプルですよね。Schemeには式と区別される文はなく、また演算子もありません。

 通常の関数はすべての引数の値を評価(計算)してから関数を呼び出しますが、スペシャルフォームやマクロでは引数の評価が行われるタイミングは、そのスペシャルフォームやマクロごとに違います。

 例えば関数を定義するdefineでは引数はプログラムなので、コンパイルされるだけであり、評価はdefine関数では行われません。condでははじめから順番に条件部分を評価していき、真になる条件があればそれ以降の条件式は評価されません。

CADのベンチャー企業を経て、独立し有限会社EY-Officeを設立。Java、Ruby、PerlなどでWebアプリを中心に開発を行ってきたが、現在は、教育に注力し「問題解決型の教育」に奮闘中。「Gauche-Trac(http://www.ey-office.com/gauche)」に今回の記事のサポートページを作りましたのでご活用下さい。HP:http://www.ey-office.com。Blog:http://d.hatena.ne.jp/yuum3

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています