これは何?

Rubyで書かれたCommon Lisp(っぽい)インタプリタです。
こもりすぷ、と読めばいいと思う。
Hikikomo Lispにしようかと思ったけど、やめた。
Uncommon Lispって一番最初に考えたけどやっぱりそういう名前を使ってる人がいた。

仕様

ANSI Common Lispになるべく準拠したい処理系。
現在進行形で進化中。

特徴
  • 基本的なフロー制御用のスペシャルフォームを全て備える
  • lisp-2
  • 基本的なPackageシステム
  • リードマクロによってリーダを拡張可能
  • 関数を簡単にコンパイルすることで、レキシカルクロージャ、スペシャル変数のサポート
  • などなど

ドキュメントは基本的に整備中。ソース読んで細かい仕様は察してください。

何の役に立つの?

本来は、「Rubyでマクロを使えるようにしちゃおうよ」という考えが出発点でした。
ですが、今のRuby文法のままでは扱いにくいなぁと思っていたら、いつの間にかLisp処理系が出来てました。
したがって、「Rubyの機能を使いつつマクロを使う」ことが出来るといえば出来ます。
それがRubyかどうかはおいといて。
一応、Rubyのコードを埋め込んだりRubyのメソッドを呼び出したりするインターフェイスを備えているので、必要なのがRubyのライブラリであるなら、ひょっとすると実用性があるのかも知れない。

それ以外では、とりあえずLispの勉強をするに足る機能は備えていると思います。
いろいろな言語で実装されたLisp処理系はありますが、おそらくリードマクロを備えたものは稀です。
Rubyで実装されたものとしてはL2Lispが有名ですが、これはSchemeのサブセットであり、機能の強力さでは比較するまでもありません。
単なるお勉強ではなくて、「Lispの強力さ」を学びたいという人(で、且つフリーのCL処理系をインストール出来ない事情のある人?)に最適です。

ダウンロード

  • 公開するの初めてなんでよくわかりませんが、Rubyと同じライセンスってことで配布します。
  • Komo Lisp ver 0.2: ダウンロード

使い方

当然Ruby VMが必要です。
ruby 1.8.6で動作確認しているので、それ以降なら動くと思います。
組み込みライブラリstringioとmathnに依存してるので、それらがあれば多分以前のverでも大丈夫。

展開して"ruby lisp.rb"を実行するとlisp処理系が起動します。
一行目のrubyパスを書き換えて直接実行してももちろんいいです。
引数としてファイル名を渡すと、そのファイルをlisp処理系がLoadし、処理系が終了します。

Changelog

やる気の無い更新履歴

2008-06-06 ver 0.2
個人ページを更新する環境が出来上がったためようやく更新。
lambda-listの大幅な拡張、定数の導入、いくつかのバグ修正、及びdefstructの試験的実装
loopの導入(optional)

To do

罠に嵌らないための欠陥リスト&自分用To doリスト

  • lambda-list
    • &allow-other-keys未サポート
  • オブジェクトシステム
    • 未実装
    • とりあえずtype-ofからはじめたい予定
  • パッケージシステム
    • nicknameがひとつしか設定できない
    • 関連して、defpackageオプションやアクセサが敢えて"nicknames"を"nickname"に置き換えてある
  • loopマクロ
    • loop.lisp内で実装
    • 使いたい時は明示的にloadしなければならない
    • Subsetなので全ての機能は使えない