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

Back to archive index

YamaKen yamak****@bp*****
2005年 8月 22日 (月) 17:21:23 JST


At Mon, 22 Aug 2005 16:12:10 +0900,
mover****@hct***** wrote:
> 後もう一つバグっぽいコードを見付けたのですが、rkに詳しい方がいらっしゃいましたら調査
> お願い出来ますでしょうか?

以前調べた時にはrk.scmには#fと()の区別ができてないコードが散見さ
れました。テストが無かったのでエンバグの危険性を考えて書き換えは
しませんでしたが。

一応、参考までに昔rkを調査した時の個人メモを添付します。しかし、
SIOD依存の多く残っているコードは大抵テストのないコードなので、エ
ンバグの危険を冒してまでR5RS互換路線の泥沼にはまるよりは
SigScheme側でSIODバグ互換を目指す方がはるかに建設的だと思います
(letの件も)。

テストのないIMコードをいじるのは地獄ですよ。いつでもSIODバグ互換
路線に切り替えられるようにしておく事をお勧めします。

> また、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互換で無いように思われます。

このチェックはuim-module-managerの導入に伴ってr946で徳永さんが追
加したものですね。r947で私が単純化しましたが、ロジックは変えてな
いんでim-listまたはenabled-im-list中の#fを無視するもののはずです。
意図しているのは()ではありません。

uim-module-manager以外では#fまたは()がimリストに入り込む事は無い
はずなので、このコードが問題になるとしたらuim-module-manager側で
()がimリストに入り込んでいると思われます。

-------------------------------
ヤマケン yamak****@bp*****
-------------- next part --------------
* rk.scm
** 緇恰宛????????В茯?2004-08-30
http://lists.sourceforge.jp/mailman/archives/anthy-dev/2004-August/001011.html

- rk-context-new

??????rk context?????????綣?????context????????鴻?rule鐚??a???
????????;鐚?????????????mmediate-commit??ack-match??????荀???????????????k context????若?絖???????????篏帥???
- rk-expect

??k context??????緇?????????<??????????箴???違??≪?t????????????????????aiueo????鰹?????ゃ?????欠Щ???鐚??t鐚??t???腱祉????
?????????????????????

- rk-push-key!

??k context???????ュ????????欠Щ??儀????育?腱糸????絖??菴????????

- rk-push-key-last!

??k-push-key!?с?n???????????????菴????????鐚????iueo???????
?с???????鐚???с?竜?欠Щ鐚??????????????????????戎?c??帥???????с?鐚?????????阪???????????∽??с???????????????????茯よ????
??∽???????

- rk-pending

????pending?倶?????障??障?????????c???????????<??????????

- rk-flush

??k context????祉???????

- rk-partial

?????戎?????????綽?????

- rk-current-seq

?????戎?????????綽?????

- rk-backspace

??ending?????????????<?????????????絖??????????室????違?????k-delete??????

** rkc
(define-record 'rk-context
  '((rule             ())
    (seq              ())
    (immediate-commit ())   ;; #f?
    (back-match       ()))) ;; #f?

- immediate-commit
  anthy?с?#t?????????????rk-proc-end-seq?????  ????????-push-key-last!??????ad-hoc??申?????????????????
- back-match
  筝祉?hangul???

** API
- rk-context-new
  (rule immediate-commit back-match)
- rk-flush
  seq??????

- rk-pending
  ?上?pending?倶?????障??障?????????c???????????<??????????
- rk-current-seq (rkc)
  ?上???kc??atch???rule-entry??????rk-lib-find-seq()???綽??
- rk-partial?
  back-match???絽吾?#t??ront-match?с?rk-lib-find-partial-seq() 
  ???????ゃ???????罩祉?膈???????????絎??rk-has-subsequent????
  ?????????
- rk-expect
  rkc??????緇?????絖??rk-lib-expect-seq()???????上???
- rk-push-key! (rkc key)
  筝??絖????- rk-push-key-last!
  ?ュ?????≦??c?partial???茖??????ュ???∈絎?????
- rk-backspace
  pending?????????
- rk-delete
  ?上???k-backspace???絖???ュ????絨?????綣窮?????? 篏帥?????鴻?

** 羣?PI?
- str-seq-equal?
  ????????????紕??罸????qual????膈?- str-seq-partial?
  arg1??rg2??????絖?????罨<?荀???????  (str-seq-partial? '("n") '("n" "a")) => "a"
  (str-seq-partial? '("n" "n") '("n" "n")) => #f
  (str-seq-partial? '("n" "n") '("n" "n" "a")) => "a"
- rk-lib-find-seq
  key sequence????????????rule-entry?????  (rk-lib-find-seq '("n") ja-rk-rule)
    => ((("n")) ("?? "?? "鐓?))
- rk-lib-find-partial-seq
  key sequence????????????rule-entry??????絎???????????
  (rk-lib-find-partial-seq '("n") ja-rk-rule)
    => ((("n" "n")) ("?? "?? "鐓?))
- rk-lib-expect-seq
  returns possible next characters
  (rk-lib-expect-seq '("k" "y") ja-rk-rule)
    => ("o" "e" "u" "i" "a")

** internal
- rk-push-key-front-match
  rk-push-key!????????front-match???
  rk-partial-seq???t???seq??????菴遵???f??????????с????
  ?医???????????????札筝???若???k-proc-tail??????菴??
    (rk-proc-end-seq rkc rule-entry seq)
    (rk-proc-tail rule-entry seq)
- rk-proc-end-seq
  ?ュ?????≦??c?seq(pending)????違????immediate-commit?????  ?????????????#t???篁ヤ???"??)(cdar ent)??????seq???
  ???composed char(cadr ent)??????
    ((("f"). ("??))("" ""))
- rk-proc-tail
  絎??????弱???????exact but has a partial match??????
  composed char?????????荀?y?ュ???ending??????match???
  entry?????equence??就?????????rk-flush?????????荀?y??  ???pending??????
- rk-merge-seqs
  "n1"????"????????????ad-hoc?∽?
- rk-partial-seq?
  rk-partial?????????
** internal (back-match???)
- rk-find-longest-head
  rk-check-back-commit?????????longest-head
  ?上???eq?у????longest match????帥?????ゃ?matched seq
- rk-find-longest-back-match
  rk-check-back-commit?????????longest-tail
  ?上???eq?у????longest match????帥?????ゃ?matched seq
- rk-push-key-back-match (rkc key)
  rk-push-key!???????? back-match??  seq??ey??恭???rk-check-back-commit??????菴??
- rk-check-back-commit (rkc rule rseq)
-- rk-push-key-back-match????????-- commit??????絖??菴??
-- new-seq??atch???rule-entry??綾???(longest match????激????
   ???????ead??ail???茹c???ead??ommit???????????????
   ???tail??artial match???tail?眼?????с??????ead?眼?
   longest match?????
** back-match

** ????ュ?
- pending????????????????????ュ????"????????羶???糸?羶??????障??????????


Anthy-dev メーリングリストの案内
Back to archive index