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