#(define qwe 1) (define (wer a b) (set! a b)) (wer qwe 2)
で qwe が 1 のままなのは何故でしょうか。
#変数は値につけられた名前です。(wer qwe 2) と呼び出されると、まずqweがつけられている値が取り出され、(wer 1 2)としてwerが呼ばれます。qweはこの時点で既に無関係になっちゃいます。werの中では1にa、2にbという名前がつけられます。set!はaという名前をつけ直しているだけなので、set!実行後にはaもbも2につけられています。
#というわけでset!はaを変えるだけでqweには影響を及ぼさないのです。