xyzzy は 亀井哲弥氏 が作成された Emacs 系のエディタです。 xyzzy に搭載されている Lisp (以後 xyzzy Lisp と記述) は、Lisp の標準である Common Lisp に準拠 [*1] している優れた処理系です。 この xyzzy Lisp を使って、Lisp でプログラミングを楽しもう というのが本ページの趣旨であります。Lisp は初めてという方は Common Lisp 入門 を読んでみてください。Common Lisp の基本を詳しく説明しています。
『xyzzy Lisp Programming (Common Lisp 入門, 読み物) 』 の著作権は筆者「広井誠 (Makoto Hiroi) 」が保持します。 無断使用や無断転載は禁止いたします。
『xyzzy Lisp Programming (Common Lisp 入門, 読み物) 』 で作成したプログラムはフリーソフトウェアとします。 ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。 ただし、これらのプログラムは無保証であり、 使用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi) 」は一切の責任を負いません。 また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。
[1] は名著です。Lisp に興味のある方は一読することをおススメします。
[3] は、一般に CLtL2 (Common Lisp the Language, 2nd edition) と呼ばれている
Common Lisp の仕様書(全訳)です。
Z-MUSIC は X68000 用の音源ドライバです。 X68000 に内蔵されている FM 音源、ADPCM 音源の制御のほかに、 外部の MIDI 音源も制御することができます。 Z-MUSIC の特徴は、MML (Music Macro Language) 言語を使ってデータを記述することです。 このファイルを ZMS ファイルといいます。Z-MUSIC では、 ZMS ファイルをコンパイルして ZMD ファイルを作成し、それを音源ドライバに渡すことで、 データが演奏される仕組みになっています。
今のところ、正式な Windows 版 Z-MUSIC は発表されていません。ですが、 Z-MUSIC 互換コンパイラ ZMC3.EXE と、 ZMD ファイルからスタンダード MIDI ファイルへのコンバータ Z2M3.EXE が、 やぎ。氏 によって開発されています。これらのソフトウェアを利用することで、 Windows でも Z-MUSIC 互換 の MML を使って MIDI データを作成することができます。
Zmusic モードは ZMS ファイル用のメジャーモードです。 バージョン 0.04 では次のことができます。
バージョン 0.04 で使用できる MIDI Player は、 コマンドラインから演奏するファイル名を指定できるタイプだけです。 M.Hiroi は、ふみぃ氏が開発された「TMIDI Player バージョン 3.6.9」を使って、 動作確認を行いました。TMIDI Player は、 Vector または ふみぃのソフトウェア工房 からダウンロードできます。
演奏停止コマンドは、DDE (Dynamic Data Exchange : Windows でのプロセス間通信機能) を使っているため、バージョン 0.04 では TMIDI Player 専用のコマンドです。 他の MIDI Player では使用できないので、ご注意くださいませ。
実をいうと、M.Hiroi は MIDI データを作ったことがありません(笑)。 Zmusic モードを作ってみましたが、的外れなこともあるでしょう。 ご意見やご要望は、お気軽にゲストブックやメールでお知らせください。
Zmusic モードでは、 ZMS ファイルの拡張子 .ZMS を .ZMD に変換して ZMD ファイル名を求めていますが、 パス名に ZMS が含まれているとファイル名の変換に失敗します。 変換には関数 substitute-string を使っています。
substitute-string string pattern replacement
この関数は pattern に正規表現を使うことができますが、 ここでうっかり pattern に ".ZMS" と設定してしまいました。これだと、 ピリオド ( . ) がどの文字にもマッチする正規表現になるため、 パス名の中の ?ZMS が .ZMD に変換されてしまい、コンパイルすることができません。 また、MIDI ファイルを演奏する処理で、同じ間違いをしています(苦笑)。 どちらの場合も、".ZMS" を "\\.ZMS$" に修正すると正常に動作します。
xaiax さん、ご報告ありがとうございました。
Zmusic モード(ver 0.04)(4,717 byte)
マスターマインドは数当てゲームです。 0 から 9 までの中から重複しないように数字を 4 つ選びます。 マスターマインドの場合、数字だけではなく位置も当てなくてはいけません。 数字は合っているが位置が間違っている個数を cows で表し、 数字も位置も合っている個数を bulls で表します。 bulls が4になると正解というわけです。
このゲームでは、当てる数字の桁数を 3, 4, 5 の中から選ぶことができます。 また、数を当てるだけではなく、コンピュータとの対戦バージョンを用意しました。 この場合、桁数は4だけです。先に当てた方が勝ちとなります。 10回で当てることができない場合は引き分けですが、 その前にコンピュータが当てるでしょう(笑)。 コンピュータの思考は強くありませんが、平均すると5,6回で当てることができます。 まぐれ当たりもありますので油断は禁物ですよ。
対戦バージョンをプレイする場合、Pentium 166 MHz 相当の CPU では、 最初にデータの初期化を行うため、ゲームの開始まで少々時間がかかります。 また、プレイ中でもコンピュータの思考で少しだけ待たされることがあります。
バイトコンパイルしたファイル master.lc を xyzzy/site-lisp に置いてください。 プログラムのロードは M-x load-library で実行するか、 起動時に実行されるファイル .xyzzy に次のプログラムを追加してください。
(load-library "master")
実行方法は M-x でコマンド名を入力します。マスターマインドをプレイする場合は master-mind を、対戦バージョンをプレイする場合は master-fight を入力してください。
マスターマインド(ver 0.10)(6,511 byte)