YamaKen
yamak****@bp*****
2006年 4月 9日 (日) 02:11:41 JST
#私のメール環境の問題で、先程までこのメッセージに気付いていませ #んでした。今さらの反応ですみません。 At Sat, 07 Jan 2006 01:05:50 -1000 (HST), shiro****@lava***** wrote: > > From: YamaKen <yamak****@bp*****> > Subject: [Gauche-devel-jp] null-list?のバグ > Date: Sat, 07 Jan 2006 02:18:22 +0900 > > > Gauche 0.8.6でSRFI-1のnull-list?にバグがありました。 > > > > gosh> (null-list? '(1 2 3 . 4)) > > #f > > > > ここはエラーになるべきですよね。 > > Schemeにおいて "It is an error" というのは > 「そういうことをするのは正しいプログラムではない。 > しかし正しくないプログラムをどう扱うかは処理系依存である。」 > ということです。従って#fを返すのも仕様準拠。 勉強になります。"...that are not defined on dotted lists" のくだ りも合わせて考えれば知らずともそう理解すべき文でしたが、堅い表現 の英文に慣れていないもので思い込みの解釈をしてしまいました。 > SRFI-1の仕様の額面をそのまま読めば、確かにそこでエラーを > 投げる実装も有り得ます。しかし、null-list?の本来の目的は > リストの終端確認ですから、ループの各イテレーションで呼ばれるのが > 自然な使い方です。dotted listかどうかを確認するのはO(n)かかり > ますから、いちいちそれを確認しているとループが全部O(n^2)に > なっちゃいます。 これも言われてみればその通りで、わざわざ "recommended as the termination condition for list-processing" と言及している意味や 参照実装の存在も確認せず「エラーにすべき」という思い込みだけで行 動してしまいました。 お騒がせしてすみません。丁寧な解説ありがとうございました。 > 実際、現在のGaucheの実装はSRFI-1の参照実装そのままです。 > さらに、SRFI-1の参照実装のコメントにはこんなことも書いてあります。 > > ;;; This is a legal definition which is fast and sloppy: > ;;; (define null-list? not-pair?) ------------------------------- ヤマケン yamak****@bp*****