OGURISU Osamu
oguri****@kanaz*****
2007年 5月 23日 (水) 11:29:09 JST
小栗栖です。 Linux上の version 0.8.10 [utf-8,pthreads] な gosh の string-upcase! が動かなくなっています。うちだけでしょうか? 0.8.9では正常でした。 gosh> (gauche-version) "0.8.10" gosh> (use srfi-13) #<undef> gosh> (string-upcase #`"abc") "ABC" gosh> (string-upcase! #`"abc") *** ERROR: real number required: #<undef> Stack Trace: _______________________________________ gosh> また、srfi-1のlist=が (list= eq? '(1 2 3) '(1 2 3) '(1 2 3)) => #f となってしまいます。これはsrfi-1の参照実装がそもそもおかし いようで、次のように修整してみました。コメントアウトされた 行が参照実装のコードで、新しく入れたlist-b2と元々のlist-b との区別が必要のようです。 (define (list= = . lists) (or (null? lists) ; special case (let lp1 ((list-a (car lists)) (others (cdr lists))) (or (null? others) (let ((list-b (car others)) (others (cdr others))) (if (eq? list-a list-b) ; EQ? => LIST= (lp1 list-b others) ;; (let lp2 ((list-a list-a) (list-b list-b)) (let lp2 ((list-a list-a) (list-b2 list-b)) (if (null-list? list-a) ;; (and (null-list? list-b) (and (null-list? list-b2) (lp1 list-b others)) ;; (and (not (null-list? list-b)) (and (not (null-list? list-b2)) ;; (= (car list-a) (car list-b)) (= (car list-a) (car list-b2)) ;; (lp2 (cdr list-a) (cdr list-b))))))))))) (lp2 (cdr list-a) (cdr list-b2))))))))))) 最近はありがたく楽しくgaucheを使わせてもらってるだけで、久 しぶりにソースをみたのはひさしぶりだったんですが、SRFIの部 分は(も)SchemeからCに自動変換されてるんですね。list=の修整 もSchemeレベルで確かめただけで、string-upcase!のほうはどこ がおかしいか追えませんでした。報告まで。 -- 小栗栖 修 / OGURISU Osamu