[Anthy-dev 471] Re: uimのキーバインド定義を簡単に

Back to archive index

YamaKen yamak****@bp*****
2004年 1月 30日 (金) 00:43:27 JST


At Thu, 29 Jan 2004 23:59:11 +0900 (JST),
kou****@cozmi***** wrote:
> リポジトリにアクセスできないのでパッチのパッチになってしまう
> のですが,set!は使わない方がよいと思います.
> と思ったら意外といろんなところでset!は使われているんですね.

ご指摘ありがとうございます。Scheme(というかlisp系全般)は触りはじ
めたばかりなので色々教えて頂けると助かります。

頂いたパッチのようなコードも一度書いてみたんですが、私の趣味で
「コード片には実体を表す名前を付ける」というルールに従って一度
key-strsに収めてから処理していました。

まだよく分かっていないので教えて欲しいのですが、set!がまずいとい
うのはこのコードでの使い方がまずいのか、それともそもそもコーディ
ングスタイルとして良くないのかどちらでしょうか。ヒントなり頂けた
らsiodでの実装の確認がてらにちょっと勉強してみようと思います。

> # mapではなくてmapcarを使っていることにもびっくり.

uimで使っているsiodはR4RS相当? らしくて色々とびっくりさせられま
す。list?もmapもcaseもcharも無いしeqv?はstringを見てくれないしで
なかなか切ないです。というわけで、TinySchemeへの移行は強く支持し
ておきます。 >田畑さん

>  +(define make-key-predicate
>  +  (lambda (key-strs)
> -+    (if (string? key-strs)
> -+      (set! key-strs (list key-strs)))
> -+    (let* ((predicates (mapcar make-single-key-predicate key-strs)))
> ++    (let ((predicates (mapcar make-single-key-predicate
> ++                              (if (not (list? key-strs))
> ++                                  (list key-strs)
> ++                                  key-strs))))
>  +      (lambda (key key-state)
>  +      (apply proc-or
>  +             (mapcar (lambda (predicate)

# let*の*はコードをいじりまわした名残りで消し忘れました。お恥ず
# かしい。

-------------------------------
ヤマケン yamak****@bp*****



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