フィード:
投稿
コメント

2008年7月7日のアーカイブ

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

でも、私は自分のプログラムではこういう書き方はしません・・・で、この使い方にはバグが潜んでいたわけですね(汗
もしも私が一人でデバッグしていたら、これって何時まで潜んでいたことやら

投稿の続きを読む »