[Anthy-dev 2259] Re: r5rs: SigSchemeへの移行方針

アーカイブの一覧に戻る

Kazuki Ohta mover****@hct*****
2005年 8月 22日 (月) 16:12:10 JST


太田です。

確か第三引数が'(())の場合に無限ループに陥っていました。しかしtest-uim-utils.scm
でそれが動く事が保証されたので、問題はSigScheme側に有るという事が分かりました。
なので、一旦util.scmに以前のSRFI Proceduresを復活させようと思います。調査有難
う御座いました。

####################################################################
# 以下気づいた事。
####################################################################

後もう一つバグっぽいコードを見付けたのですが、rkに詳しい方がいらっしゃいましたら調査
お願い出来ますでしょうか?

ubuntu% svn diff anthy.scm
Index: anthy.scm
===================================================================
--- anthy.scm   (リビジョン1265)
+++ anthy.scm   (作業コピー
@@ -473,8 +473,8 @@
                                   res)
                (ustr-insert-elem! (anthy-context-raw-ustr ac)
                                   key-str))
-             (if (not (rk-pending rkc)
-                  (anthy-commit-raw ac))))))))))
+             (if (not (rk-pending rkc))
+                  (anthy-commit-raw ac)))))))))
 
 (define anthy-has-preedit?
   (lambda (ac)

あと、letにおいて値の指定が無いコードが散見されます。例えば、skk.scm内のこのコード。

   677 |(define skk-begin-completion
   678 |  (lambda (sc)
   679 |    (let ((res))

こういったコードが他にもまだ有るので気づいた時に修正して頂けると助かります。

また、andでnull listのチェックをしている箇所もあります。例えば、
custom-im-list-as-choice-recにおいて、imがnilかどうかをandでチェックしています。

    34 |;; ugettext should be performed higher layer                                                                                           
    35 |(define custom-im-list-as-choice-rec
    36 |  (lambda (lst)  
    37 |     (filter-map (lambda (im)
    38 |                   (and im  

今のところこういったコードがR5RS互換で無いように思われます。


> > 予想以上にSIOD依存が激しいようですね。基本的な方針には賛成なので
> > すが、util.scmのSRFI-1互換関数を復活させるのには少し躊躇しています。
> > iterate_listsが空リストをうまく扱えていないような気がします。以下のような
> > バグも有ったり。こう変更すると動かなくなるのですがね...という訳でtrunkの方
> > のiterate_listsをもう一度見直して頂けると嬉しいです。
>
> こりゃ恥ずかしいバグですね。r1274で修正しておきました。どうもです。
>
> しかし、この修正は以下のようなリストが1つだけのケースを高速化す
> るだけの影響しか与えません。
>
> (filter positive? '(0 -1 2 -3 4))
>
> 元の(uim_scm_length(lists) == 1)のコードではこの高速実行パスがい
> つでも無効になっていただけで、実行自体は正常でなければおかしいで
> す。コードを見直してtest-uim-utils.scmにもテストを追加してみまし
> たが、特におかしなところは見つかりませんでした。
>
> 確実におかしな結果になるテストケースはありますか?
>
> > Index: uim-util.c
> > ============================================================
> >======= --- uim-util.c  (リビジョン1271)
> > +++ uim-util.c  (作業コピー
> > @@ -508,7 +508,7 @@
> >    uim_lisp elms, rest, rests, mapped, res, termp, pair,
> > form; uim_bool single_listp;
> >
> > -  single_listp = (uim_scm_length(lists) == 1) ? UIM_TRUE :
> > UIM_FALSE;
> > +  single_listp = (uim_scm_c_int(uim_scm_length(lists) ==
> > 1)) ? UIM_TRUE : UIM_FALSE;
> >    res = seed;
> >    if (single_listp) {
> >      rest = uim_scm_car(lists);
>
> -------------------------------
> ヤマケン yamak****@bp*****
> _______________________________________________
> Anthy-dev mailing list
> Anthy****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/anthy-dev

-- 
-------------------------------------------------
Kazuki Ohta : mover****@hct*****
-------------------------------------------------



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る