連載
» 2008年12月17日 00時00分 公開

Gaucheでメタプログラミング(2):Gaucheでプログラミング (2/4)

[吉田裕美,有限会社イーワイオフィス]

goshコマンドを使ってみる

 Gaucheのプログラムを実行するには、PerlやJavaと同じように、ファイルにプログラムを書き、コマンドの引数として実行します(Javaはコンパイルも必要ですが)。

 aloha.scmファイルに以下のようなScheme(Gauche)のプログラムを書きます。

(print "Aloha!")
aloha.scm

 そしてgoshコマンドで実行するとAloha!と表示されます。

% gosh aloha.scm
Aloha!

REPLで使う

 goshでは、このような実行方法のほかに、goshとだけ入力することでREPL(read-eval-print loop)が使えます。ここでは、入力したScheme(Gauche)のプログラムをすぐに実行できます。

% gosh
gosh> (print "Aloha!")
Aloha!
#<undef>
gosh> (+ 1 2)
3
gosh> (exit)
%

 上の例では(print "Aloha!")と(+ 1 2)を実行しています。(exit)を実行するとgoshを終了します。#<undef>は(print "Aloha!")の値です。

 REPLでは常に入力されたプログラムを評価(計算)した値を表示します。print関数はコンソールに表示することが目的の関数なので、関数としての値は「値がない」という意味で#<undef>となります。

 このように、プログラムをファイルに書かないで直接実行できる環境は、プログラムを開発する際にちょっとしたコードの確認や関数(API)の動作確認にとても便利です。Ruby(irb)やPythonにも同様の機能があるのでなじみのある方もいると思いますが、REPLはLispの処理系が始まりです。

 さて、goshのREPL機能ですが残念なことがあります。下の例のように入力したプログラムに簡単な間違いがあった場合、以前入力したプログラムは再利用できず、最初から打ち直しになってしまうのです。

% gosh
gosh> (priny "Gauche")
*** ERROR: unbound variable: priny
Stack Trace:
_______________________________________
gosh> (print "Gauche")
Gauche
#<undef>

Gauche-readlineのインストール

 UNIXのたいていのShellでは↑(上矢印)キーを入力すると1つ前のコマンドが入力エリアに表示され、再利用できます。これと同じようなことを行える拡張モジュールとして、Gauche-readlineがあります。大変便利なのでこれをインストールしてみましょう。

 手順は、Gaucheのインストールと同じです。

% wget http://www.netlab.cs.tsukuba.ac.jp/~yokota/archive/Gauche-readline-20070707.tar.gz
% tar xzf Gauche-readline-20070707.tar.gz
% cd Gauche-readline-20070707
% ./configure
% make
% make check

 make checkの実行結果にpassed.が表示されればmakeは成功ですので、インストールしてください。

% sudo make install

 ただし、このモジュールは素直にインストールできない場合もあります。私の使っている環境では、Mac OS X 10.5とUbuntu 8.1ではインストールできましたが、CentOS 4では上の手順だけではインストールできませんでした(Makefileのreadline_LIBSを= -lreadline -lncursesとすることでインストールできました)。

 Gauche-readlineはgosh-rlというコマンド名でインストールされます。起動するとgoshと同じように使えますが、↑キーで以前に入力したコマンドを再利用できます。また、関数名の補完ができます。例えば、(priまでキー入力してTABキーを押すと、(printと補完されます。長い関数名を入力したりするのに便利です。

関連リンク:

Readline module for Gauche
http://www.netlab.cs.tsukuba.ac.jp/~yokota/izumi/gauche/


rlwrapを使う

 どうしても、Gauche-readlineがインストールできないときは、rlwrapを使う方法があります。

 rlwrapはLinuxなどのパッケージ管理システム(apt、yum、ports)でインストールできるコマンドです。もちろんrlwrapのWebサイトからソースをダウンロードしてインストールもできます。

 使い方は、

% rlwrap gosh
gosh>

のように起動します。すると↑キーで以前に入力したコマンドを再利用できるようになります。ただし、関数名の補完はできません。

関連リンク:

rlwrap
http://utopia.knoware.nl/~hlub/rlwrap/


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。