Shiro Kawai
shiro****@lava*****
2006年 1月 7日 (土) 20:05:50 JST
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を返すのも仕様準拠。 SRFI-1の仕様の額面をそのまま読めば、確かにそこでエラーを 投げる実装も有り得ます。しかし、null-list?の本来の目的は リストの終端確認ですから、ループの各イテレーションで呼ばれるのが 自然な使い方です。dotted listかどうかを確認するのはO(n)かかり ますから、いちいちそれを確認しているとループが全部O(n^2)に なっちゃいます。 実際、現在のGaucheの実装はSRFI-1の参照実装そのままです。 さらに、SRFI-1の参照実装のコメントにはこんなことも書いてあります。 ;;; This is a legal definition which is fast and sloppy: ;;; (define null-list? not-pair?) --shiro