yasuy****@timed*****
yasuy****@timed*****
2004年 1月 30日 (金) 22:37:40 JST
えんどうです。 call-with-iterator の end? 書き方で悩んでいます。 MySQL の mysql_fetch_row 関数は、 実行した後でないと次の行が無いことが分かりません。 (define-method call-with-iterator ((r <mysql-result-set>) proc . option) (if (not (slot-ref r 'open)) (raise (make <dbi-exception> :error-code -4 :message "<mysql-result> already closed."))) (let ((is-end #f)) (define (end?) is-end) (define (next) (let ((row (mysql-fetch-row (slot-ref r '%result-set)))) (if (null? row) (set! is-end #t)) (if (equal? row '()) (set! is-end #t)) row)) (proc end? next))) このような call-with-iterator を書き、 +------+----------+ | id | name | +------+----------+ | 10 | nobsun | | 20 | yasuyuki | +------+----------+ このようなテーブルに対して (display (map (lambda (row) (list (dbi-get-value row 0) (dbi-get-value row 1))) result)) を実行させると、以下のように末尾に ('() '()) が付加されてしまいます。 ((10 nobsun) (20 yasuyuki) (() ())) mysql_fetch_row のように、 実行しないと終りが分からない場合、end? はどう書くのが良いのでしょうか...? -- ENDO Yasuyuki <yasuy****@timed*****> http://www.kahua.org/ http://www.timedia.co.jp/