Ypsilonのバグフィックス版をリリースしました。皆様のご協力のおかげで思ったより早く安定してきたと思います。コメントやバグレポートをお送り頂いた方々に感謝いたしております m(_ _)m
こういったソフトウエアのデバッグは一人では難しいものです。なぜならテスト用のプログラムが偏ったものになるからです。これはプログラマーがそれぞれ自分のコーディングスタイルを持っていることに起因します。「こんな使い方あったのか〜」という発見があり、そしてその中にバグが潜んでいることもしばしばです
最近そんな例に関連する投稿がcomp.lang.schemeにありました。
(define (((f x) y) z) (+ x y z))
というプログラムはR6RS Schemeではエラーにしなければなりません。でも、これが使えると便利そうなんだけど・・・ そういう場合R6RSでは下記のようにポータブルに実現することができます。
(library (define+)
(export (rename (define+ define)))
(import (rnrs))
(define-syntax define+
(syntax-rules ()
((_ (f . args) . body)
(define+ f (lambda args . body)))
((_ var val)
(define var val)))))
(import (define+))
(define (((f x) y) z) (+ x y z))
(define g ((f 1) 2))
(g 3) ;=> 6
でも、私は自分のプログラムではこういう書き方はしません・・・で、この使い方にはバグが潜んでいたわけですね(汗
もしも私が一人でデバッグしていたら、これって何時まで潜んでいたことやら