[Gauche-devel-jp] Re: null-list?のバグ

Back to archive index

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*****



Gauche-devel-jp メーリングリストの案内
Back to archive index