そこで、スキーム変数のバインドに関する質問です。私が次の機能を持っているとしましょう:
(define undefinedTest (lambda (y) (list x y)))
Guile-Scheme 2.0.3 で実行すると、x がバインドされていない変数であることが警告されます。次に、次のステートメントを実行すると
> (let ((x 'something)) (undefinedTest 'else))
エラーとそれをデバッグするオプションが表示されます。ただし、次のステートメントを実行すると:
> (define x 'something)
> (undefinedTest 'else)
(他の何か)の期待される答えが得られます。x が最上位で定義されている場合にスキームが x をバインドできるのに、let によってバインドされている場合はできないのはなぜですか。これは、関数が定義されているときにトップレベルでも定義されているため、スキームが最も近い囲み環境を検索するときに、let 環境が実際には「囲んでいる」わけではないためです。レベル"?