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

Back to archive index

YamaKen yamak****@bp*****
2004年 1月 31日 (土) 02:23:22 JST


ヤマケンです。

At Fri, 30 Jan 2004 01:36:11 +0900 (JST),
kou****@cozmi***** wrote:
>   YamaKen <yamak****@bp*****> wrote:

>   ;; 簡易list?(循環リスト未対応)
>   (define (list? x)
>     (or (null? x)
> 	(and (pair? x)
> 	     (list? (cdr x)))))
> 
>   (let* ((key-strs (if (not (list? key-strs))
> 		       (list key-strs)
> 		       key-strs))
> 	 (predicates (mapcar make-single-key-predicate key-strs)))
>     ...)
> 
> という方が*私の*好みです.

なるほど。上記のようにまとまったコードを通して見ると須藤さんの
Scheme観というかコードを見ている視点のようなものが少しだけ掴めた
ような気がします。まずは形から入ってみる事にして、しばらく上記の
ようなスタイルをマネさせて頂きます。

上記のlist?とそれを使った書き換えを取り込ませて頂きました。あり
がとうございました。

> # (define list?
> #   (lambda ...))
> # ではないのも.

こちらは逆にlambdaを使う方が私の好みなので、しばらくそのまま経験
を積んでみます。

> > まだよく分かっていないので教えて欲しいのですが、set!がまずいとい
> > うのはこのコードでの使い方がまずいのか、それともそもそもコーディ
> > ングスタイルとして良くないのかどちらでしょうか。ヒントなり頂けた
> > らsiodでの実装の確認がてらにちょっと勉強してみようと思います。
> 
> 後者です.関数型の言語では代入はあまり推奨されていないような
> 気がします.
> # Schemeなんて関数型じゃないという話を聞いたこともありますが.

関数型という意識は全く持たずに手続型言語の視点で扱っていました。
最初に触ったlispがelispというのも影響していると思いますが。今後
は副作用なしで自然に書けるところではなるべくset!を使わないスタイ
ルを試してみます。set!を使った方が単純になるところでは無理しませ
んが。

> > す。list?もmapもcaseもcharも無いしeqv?はstringを見てくれないしで
> 
> eqv?はもともとstringは扱っていなかったような...
> stringを同値判定するならeqv?ではなくてequal?を使うとよいので
> はないでしょうか?

R5RSを見直してみたらその通りに書いてありました。色々調べているう
ちに脳内で記憶が差し替わってしまったようです。今まで使ってきた言
語ではeq?とequal?相当の区別しか無かったので、どうもeqv?に対して
直感的なイメージが確立していないようです。

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



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