Kouhei Sutou
kou****@cozmi*****
2004年 1月 30日 (金) 01:36:11 JST
須藤です. In <20040****@mbox0*****> "[Anthy-dev 471] Re: uimのキーバインド定義を簡単に" on Fri, 30 Jan 2004 00:43:27 +0900, YamaKen <yamak****@bp*****> wrote: > ご指摘ありがとうございます。Scheme(というかlisp系全般)は触りはじ > めたばかりなので色々教えて頂けると助かります。 いえ,私も初心者なので... > 頂いたパッチのようなコードも一度書いてみたんですが、私の趣味で > 「コード片には実体を表す名前を付ける」というルールに従って一度 > key-strsに収めてから処理していました。 であれば ;; 簡易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))) ...) という方が*私の*好みです. # (define list? # (lambda ...)) # ではないのも. > まだよく分かっていないので教えて欲しいのですが、set!がまずいとい > うのはこのコードでの使い方がまずいのか、それともそもそもコーディ > ングスタイルとして良くないのかどちらでしょうか。ヒントなり頂けた > らsiodでの実装の確認がてらにちょっと勉強してみようと思います。 後者です.関数型の言語では代入はあまり推奨されていないような 気がします. # Schemeなんて関数型じゃないという話を聞いたこともありますが. > す。list?もmapもcaseもcharも無いしeqv?はstringを見てくれないしで eqv?はもともとstringは扱っていなかったような... stringを同値判定するならeqv?ではなくてequal?を使うとよいので はないでしょうか? -- 須藤 功平 kou****@cozmi*****