Shammer's Philosophy

My private adversaria

CLOSエクササイズ_値渡し参照渡し

ちょっと今更感もあるが、Cのように関数で値を渡したときに参照渡しではなく値渡しになるのかが気になる。値渡しではなく、参照渡しと予想してはいるが、、、そうじゃないならポインタを見えなくしている意味がない。

? (defclass test ()
((x :reader get-x :writer set-x)))
#<STANDARD-CLASS TEST>
? (defclass wrap ()
((test :reader get-test :writer set-test)))
#<STANDARD-CLASS WRAP>
? (defparameter test01 (make-instance 'test))
TEST01
? (defparameter wrap01 (make-instance 'wrap))
WRAP01
? (set-test test01 wrap01)
#<TEST #x302000D20BFD>
? (set-x 100 test01)
100
? (get-x (get-test wrap01))
100
? (set-x 200 test01)
200
? (get-x (get-test wrap01))
200
? (let ((aaa (get-test wrap01)))
(set-x 300 aaa))
300
? (get-x (get-test wrap01))
300
? (defun change-x (wrap value)
(set-x value (get-test wrap)))
CHANGE-X
? (change-x wrap01 400)
400
? (get-x (get-test wrap01))
400
?

この結果を見る限りは、やっぱり参照渡しになっているようだ。