Scheme での代入操作には、
> (let ((x 3)) ; 変数 x の値は 3
(display x) ; 代入前の値を表示
(newline)
(set! x 5) ; 変数 x に 5 を代入
x) ; x の値を返す
3 ; display の結果: 代入前の x は 3
5 ; 式の帰り値: 代入後の x は 5
> (let ((x '(1 2 3 4 5))) ; 変数 x は (1 2 3 4 5) というリストを指している
(display x) ; 代入前の x の示すもの
(newline)
(set-car! x 0) ; x でさされるリストの car field を 0 にして、
(display x) ; x の指すものを表示
(newline)
(set-car! (cddr x) 'third) ; x でさされるリストの(1から数えて)3番目の要素の
; car field を third にして、
(display x) ; 値を表示
(newline)
(set-cdr! (cddr x) x) ; x でさされるリストの(1から数えて)3番目の要素の
; cdr field を、 x で指されていたリストにして、
x) ; x の値を帰り値とする。
(1 2 3 4 5) ; 代入前をdisplay
(0 2 3 4 5) ; (set-car! x 0) 後、リストの先頭要素が更新
(0 2 third 4 5) ; (set-car! (cddr x) 'third) 後、リストの第三要素が更新
#0=(0 2 third . #0#) ; (set-cdr! (cddr x) x) 後、リストの第三要素以降を x に設定、
; リストがサイクル構造になっている。
99.10.7/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp