郡司です。 > きしもとです > Fixnum とかシンボルの場合は、同じ値のオブジェクトなら同一のオブジェクトに > 必ずなるという性質ゆえに、同じリテラル式は毎回同じオブジェクトを返す、 > という感じでしょうか。 ですね。 ・「同じオブジェクトを返す」 というのと、 ・「同じ値(値としては同じだけどObject IDは異なる)を返す」 というのと、 ・「そのオブジェクトがImmutableである」 というのを分けて考える必要がありそうです。 > Ruby とか Python では思いつかないのですが、 > > $ gosh > gosh> (define (foo) '(1 2)) > foo > gosh> (foo) > (1 2) > gosh> (set-car! (foo) 3) > #<undef> > gosh> (foo) > (3 2) Common Lispでも同じ事を試してみました。 -------- cl> (defun foo () '(1 2)) foo cl> (foo) (1 2) cl> (setf (car (foo)) 3) 3 cl> (foo) (3 2) cl> -------- 関数定義中に生成されたオブジェクトは、その関数から 参照され続ける限りは同じもになるのですね。 (なので「同じオブジェクトが毎回返る」「そのオブジェクトは 破壊可能」が満たせる)