はじめに
SILVER HAIRED LISP は、common lispの入門書に書いているぐらいのコードなら、そのまま動く事を目標にしているLispです。
common lispにとって、clojureより覚えやすい「Javaで実装されたlisp」になる事とも言えます。
私は、common lispのサブセットがないか探していたのですが、見つかりませんでした。
私が一番気に入ったのは、uLispというマイコン用のlisp実装です。
この中に、lispで書かれた単体テストコードがありました。
しかも MITライセンス。ありがたや感謝しかない。
単体テスト
JUnit的な単体テストを行うため、独自の構文があります。
上記にある mitディレクトの 内容をカレントディレクトリにおいてください。
Windowsの場合: winshl.cmdを実行して SHLISPを起動します
cl-user >> (test-file "mit/ulisp32.txt")
{:test-success 292 :test-fail ("test-336") :test-debugger nil}
java.util.Collections.UnmodifiableMap
テスト結果は、 テスト成功が 292件、 失敗したテストが、"test-336" 。
もしデバッガーが起動するような状態になった時は、:test-debugger の後ろに何かが表示されます。
mitディレクトリについて
マイコン用にcommon lispのサブセットを開発している uLispというサイトがあります。
その中に、テストコードがありましたので、それを参考にさせてもらっています。
以下の2ファイルが、uLispのサイトから取得したファイルです。
- LICENSE.txt
- ulisp_20260528.txt
ただし、ulisp_20260528.txtのファイルをそのまま実行すると、どのテストが失敗したのか
わかりにくかったため、独自のテスト構文を作ってテストする事にしました。
書き直したファイルは以下になります。
- ulisp32.txt
オリジナルファイルの一番最後にある #| bit arrays |# については、本Lispではまだ実装が出来ていないため省略しています。
(assert-true "テスト名" S式)
S式の実行結果が偽以外ならテスト成功です。
なお本Lispでの偽は、 Lispのシンボルのnilまたは、Javaのnullが偽になります。
(assert-false "テスト名" S式)
S式の実行結果が偽ならテスト成功です。
test-fileの実行中に、デバッガーが起動してテストが停止するのが嫌だった為、
test-fileの実行中は、デバッガーを起動しない事にしました。
インフォメーション
ulisp32.txtの中を見れば、どれくらいの関数が実装されているか、わかります。