Lisp Scheme Part26
■ このスレッドは過去ログ倉庫に格納されています
0672デフォルトの名無しさん
2009/07/05(日) 13:26:06> その変更は影響がないように見えますが何故なのでしょうか
処理系がわからんから何とも言えんが、
おそらくその処理系は、クォートされたリストをすべての関数呼び出しで共有するように作られているんだと思う。
test 内の (define t '(()())) のところでは、
すべての関数呼び出しで共有される '(()()) というリストを t に束縛する、みたいな処理が行われる。
そこで、(test sa) を実行してしまうと、そのリストが '(1 ()) に書き換えられてしまう。
そのため、次回以降の test の呼び出しでは、'(1 ()) というリストが t に束縛されてしまう。
そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけないことになってるので、
こんな処理をすること自体が間違い。
やるんだったら、毎回リストを生成するようにする。
(define t (list '() '())
■ このスレッドは過去ログ倉庫に格納されています