魔術師をめざして

魔術師を目指して、相場・数学・プログラム言語を研究しています。

HandyScheme

「日本語ハンディスキーム」そういえばこの Scheme を一意に指すのだろう。

f:id:fxrobot:20140103170413j:plain

 HandyScheme は Mini-scheme、TinyScheme をルーツとした、Windows 98 / SE / Me / XP で動作する 超コンパクトな Scheme 言語(Lisp 方言、Shft-JIS 対応)処理系だ。HandyScheme にはいわゆる対話環境はなく、GUI を備えたスクリプト言語として動作する。

拡張子 .hs を HandyScheme(hS.exe)に関連付けることで、ソースファイル( .hs)を編集後、ダブルクリックで即時に通常の Windows アプリケーションと同じように実行することができるので、ちょっとした使い捨てツール等の作成が容易におこなえる。また、完成した便利なツールは 単独の「exe ファイル」として自由に再配布することも可能だ。

なお、上の説明は HandyScheme の公式サイト(現在は表示できなくなっている)における説明をほぼそのまま参照したものだ。

ところで、ぼくは使えそうな Scheme を見つけるとまずは日本語の(標準)入出力が可能か確認する。次に多倍長整数に対応しているかを念のために確認する。 Schluessel、Racket、Kawa、Mosh、Ypsilon、Scheme 48 はどれもこれに合格した Scheme だ。

HandyScheme は上で書いたとおり対話環境はない。そして、多倍長整数に対応していない。あれれ、という感じだが、Windows を前提に作られたものであり貴重な存在だ。また、TinyScheme などのソースコードを流用しているようであり、Scheme としての基本はちゃんとしているようだ。(まだそこまで評価できていない)

f:id:fxrobot:20140104201941p:plain

さて、HandyScheme は上のようなアプリケーションを簡単に作ることができる。ぼくにとってはそこが大切で、これができて、そこから先、例えば、ファイルをドロップした先を、Scheme でちゃんと処理を記述できるのなら、申し分ないのだ。

f:id:fxrobot:20140103170304j:plain

ぼくは上のように書いてみた。たった9行ほどのプログラムだが、これだけで基本的な枠組みができてしまっている。ドロップされたファイルをプログラムの中で把握できているので、あとは、そのファイルを読み込んで処理をすればよい。

ファイルをドロップさせて直ぐに実行してもよいが「終了」ボタンに加え「実行」ボタンを設けるのがよいだろう。

f:id:fxrobot:20140103172941j:plain

また、作成したプログラムは HnadyScheme に添付している「実行ファイル作成」ツールでスタンドアロンの Windows 実行ファイル(.exe)を作ることができるのだ。

左のウィンドウの上に DropTest.hscm をドロップして「作成」ボタンを押すと、out.exe という名前の実行ファイルが作られるので、その out.exe を DropTest.exe などと名前を変更する。

今回、実際に作ってみたが、そのサイズは 171KB となった。けっこう小さいぞ!

これは使えるでしょ。

今回の DropTest.hscm と同等のプログラムを作ることのできる Schem はあるだろうか? Racket ならできるだろう。ただし、Racket 場合はできた実行ファイルは 8MB ほどとデカイものになる。Schluessel も可能かもしれないが、Java との連携ではなく Schluessel の仕様だけで実現する方法が今のところわからない。それでなくても Schluessel はドキュメントが不十分だ。

もっともこれらは Scheme の本質とは関係のない話だ。しかし、ぼくにとってはいくら Scheme として優れていてもアプリケーションに仕立てられないのでは魅力半減ということになる。

Racket は、そのデカさ重さからぼくの好みではない。しかし、英語ではあるがドキュメントが充実しており機能も多い。そのリファレンスをざっと眺めたところ、ぼくが望む機能はすべて揃っていそうだ。

しかし、このファイルドロップという機能は極めて Windows に依存する機能であり、Racket でうまく行くかどうかはまだ試せていない。..が多分うまくいくと思う。Racket については、今後時間を掛けて学んでいこうと思っている。学ぶに値するシステムだと思う。

さて、HandyScheme に戻ろう。

DropTest.hscm の .hscm というのはぼくが適当に定めた HandyScheme の拡張子だ。元々は .hs とされていた。しかし、.hs は Haskell の拡張子だ。ぼくは Haskell を優先し、HandyScheme 用の拡張子は .hscm としたのだ。それで何も問題はない。

HandyScheme は今回の簡単なプログラム例でもわかるように、Windows のアプリケーションを簡単に作ることができる。その上、その処理を Scheme で記述できるのだ..と思う。というのも HandyScheme は R5RS にほぼ対応しているとのことなのだが、それらを実際に検証したわけではないので落とし穴がないともまだ断言はできないのだ。

元々、HandyScheme はゲーム作りを意識した処理系で game と名の付く手続きも多い。

f:id:fxrobot:20140104153327j:plain

具体的には、以下のようなものがある。

game-data-load、game-save-offscreen、game-sprite-regist、game-sprite-move、game-put-bg、game-sprite-crash?、game-fill-bg、game-put-zoom、game-data-width、game-data-height、game-draw

HandyScheme は手軽に書ける貴重な Windows Scheme 処理系なので、是非とも復活してもらいたいものだ。

最後に HandyScheme のマニュアルとして旧公式サイトの内容を以下に再現した。

http://scheme.yagoo.org/hs/

ただし、ダウンロードはできない。この後、作者の方に連絡を取ってみようと思っている。もし連絡が取れ、それで許可が得られたら、ダウンロードのリンクを可能にしたい。また、このページの再現自体を望ましくないと指摘された場合は、上のページ自体を削除しなければならないと思っている。

【追伸】本日 16:30 ごろ、HandyScheme の作者宛(teaselengine@yahoo.co.jp)にメールを送ったが、 デーモンから送信できなかったとのメールを受信した。