>199
ありがとうございます。
defineの所の説明とあわせて読んだら分りました。

こんどは、letrecを試してみようと、
> (letrec ((x 2) (y 'x)) (eval y))
としたところ、

;ERROR: "/usr/local/lib/scm/Init5e1.scm": unbound variable: x
; in expression: (#@@eval (#@@copy-tree #@x))
; in scope:
; (x) procedure <anon>
; (@eval @copy-tree . #@let)
; defined by load: "/usr/local/lib/scm/Init5e1.scm"

;STACK TRACE
1; x
2; (#@letrec ((x 2) (y (#@quote x))) (#@eval #@y))
といわれてしまいます。

(define x 2)(define y 'x)(eval y)
なら2が帰って来てくれるのですが、
何がいけないのでしょうか。
letrecだと変数領域が割り当てられて、
それから初期値が算出される、と書いてあったので、
このやり方ならyは既に割り当てられたxをさすようになるだろうから、
正しく動くと思ったんですが...