[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 13:46 / Filesize : 290 KB / Number-of Response : 990
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CommonLisp Scheme Part10



211 名前:189 mailto:sage [04/02/27 08:09]
>>197-198
ありがとうございました。遅くなりましたが、自分の欲しい内容への改造が
やっとできたのでお伝えします。
比較対象がアトムやquoteされたアトムの場合の動作を改善するため、
トップレベルだけを別扱いにすることにしました。
(defun match0 (vars vals)
(cond ((symbolp vars) t)
((atom vars) (eq vars vals))
((atom vals)
(and (eq (car vars) 'quote) (null (cddr vars)) (eq (cadr vars) vals)))
((eq (car vars) 'quote) nil)
(t (match vars vals))))
という関数を追加し、dbind* の labels で定義している局所関数にも
((bind0 (vars vals)
(cond ((atom vars) (if (symbolp vars) `((,vars ,vals))
`((,dummy ,vals))))
((eq (car vars) 'quote) `((,dummy ,vals)))
(t (bind vars vals))))
という定義を追加します。そして dbind* 末尾から3,4行目の
`((match ',vars ,vals)
(let* (,@(bind vars vals))
をそれぞれmatch0, bind0 の呼び出しに置き換えます。

動作の変わった例としては、以下のようなものがあります。
(dbind* 3 ((4) 5)) ; エラーにならずにnilを返すようになった
(dbind* '(3 7) (any any)) ; (3 7) を返すようになった
(dbind* '(3 7) ('any t) ; 7 を返していたのがnilを返すようになった






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<290KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef