Mosh 0.0.4 をリリースしました。(ダウンロード)
パターンマッチングライブラリが追加され、より柔軟なプログラムが書けるようになりました。
また Mosh で書かれたサンプルアプリケーションとして Grass 言語インタプリタを追加しました。Wikiのコードとあわせて現時点で Mosh で出来ることが伝わればと思います。
追加、変更点は以下の通りです。
Andrew Wright 氏のパターンマッチングライブラリを移植しました。
このライブラリはとても強力であなたの Scheme コードをより見やすくより短くしてくれるでしょう。
たとえば簡単な例として '(1 (2 3) 4 5) というリストを 1 と (2 3) (4 5) と分解したいとしましょう。でも入力されるリストは正しい形でない可能性もあるとします。
普通にやるならば list の cdr を辿っていって十分な長さがあるかどうか調べながら car/cdr を駆使してやることになるでしょう。
でも macth を使えばとても簡単に書けます。
; l に '(1 (2 3) 4 5) などの入力が入っていると思ってください
(match l
((a b . c)
(format #t "a=~a b=~a c=~a" a b c))
(else
(print "unmatch")))
; => a=1 b=(2 3) c=(4 5)
パターンを書いて、それにマッチした場合の処理を書けば良いだけです。とても簡単!。
より詳しい説明はGauche ユーザリファレンス: 11.46 util.match - パターンマッチングをご覧ください。
サンプルアプリケーションとして Grass 言語インタプリタを追加しました。(grass.scm)
Grass 言語は「草を植えるための関数型プログラミング言語です。型無しラムダ計算がベースになってます。BrainF*ckとかあの辺の言語の仲間です。」とあるように、個性的でかつ本気度の高いプログラミング言語です。
たとえば Hello, World は以下のように記述されます。
wWWWwWWWWwv wWWwWWWwv wWWwWWWwv wWWwWWWwv wWWwWWWwv wWWwWWWwv
wWWwWWWwv wWWWwWWWWwv wWWwwwwwwwwwwwwWWWWWWwWWWWWWwWWWWWWWWWwWWWWWWWWW
WWWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWww
wwwWWWWWWWWWWWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWwWWWW
WWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWW
WWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwwWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWW
WWWWWWWWWWWWWwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWW
WWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwww
wwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwww
wwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwww
wwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwww
wwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwww
wwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwww
Grass 言語の詳細は「ちょっと草植えときますね型言語 Grass」にありますので興味のある方は実装してみると面白いかもしれません。
またgrass.scm は前述のパターンマッチングライブラリで書かれていますので参考にしてください。
またインタプリタ内部にいくつかの変更があり。
- マクロが内部的にプリコンパイルできるようになりました。
- 多値システムをすべて書き直し仕様に正しく準拠したパフォーマンスの高いものになりました。(多分)
- 以下の手続きが追加されました。
- (hash-table-keys ...)
- (vector-for-each ...)
- (hash-table-for-each ...)
- (exit)
- (string-ref ...)
- (div ...)
- (list? ...)
- (macroexpand ...)
- (procedure? ...)
- (with-input-from-file ...)
- char>=?, char>?, char<=? and char.
- cons*
また以下の不具合修正をしました。ご指摘いただいた皆さんありがとうございました。
- REPL で Ctrl-D を利用して終了できるように。
- div bug (thx leque)
- case bug (thx leque)
- (read) can't read "...".
- SEGV with (write '(quote))