set! は変数への束縛を、別の値を指すように変更する。つまり代入。
gosh> (define x 1) x gosh> x 1 gosh> (set! x 10) 10 gosh> x 10
set! のもうひとつの形式は「一般化されたset!」で、 (set! (proc arg …) expression) という形をしていて、(proc arg …) の結果が expression に置き換えられる。
gosh> (define x (list 1 2)) x gosh> x (1 2) gosh> (set! (car x) (list 10 20)) #<undef> gosh> x ((10 20) 2)