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

Back to archive index

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







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