COMMON LISP JP > Archives > 2011/06/30

2011/06/30 23:29:36 UTCshiro
#
CLってリテラルリストを変更した場合に何が起きるかって仕様では決められていませんでしたっけ。変更が許されているのはCLtL2にも例が出ているのでわかるんですが、例えば (defun foo () (list '(a b c) '(a b c))) ってのがあって、(setf (caar (foo)) 'z) した後、 (foo) => ((z b c) (a b c)) は保証されてるのか、という点。
#
コンパイラが同一内容のリテラルを共有することが許されてるなら、(foo) => ((z b c) (z b c)) になる可能性もあるかな、と。そもそもリテラルリストの変更が許されてる時点で、同一内容のリテラルであっても共有してはだめってことがimplyされてるのかなあ。
#
(Schemeでは「リテラルリストは変更してはいけない」ことになっているので、同一内容のリテラルは共有できます)
2011/06/30 23:45:00 UTCshiro
#
Allegroでは別にコンパイルしてもリテラルは共有されなかったな。やっぱり変更可能=共有禁止、って理解でいいのかな。