1

手順を書きました(do-test)。テストは変数に何らかの影響を与える可能性があるため、手順で実行されないことを期待して内部envで定義したため、実行するたびに新しい環境で作業できます。驚いたことに、私のテスト手順は実際には以前の. 次のコードを見つけてください。envdo-testenvenv

(define (do-test)

  (define env '(1))
  ;(define env (list 1))

  (display env)
  (if (not (equal? (car env) 1))
    (error "assertion failed.")
    'ok)

  (set-car! env 2)
  'ok)

(do-test)
(do-test)

mit-scheme / guile / codepad.org を使用してこのコードを実行しようとしましたが、(do-test)2 回実行すると異なる結果が得られました。

しかし、行(define env '(1))をに変更する(define env (list 1))と、期待どおりの結果が得られます。( codepad.org で変更前後のコードを見つけることができます)

私の知る限りでは、2 番目が call procedure であることを除いて、同じである必要があり'(1)ます。(list 1)list

なぜこれが起こるのか、プログラムが以前の値を再利用しないようにするにはどうすればよいでしょうか?

4

1 に答える 1