сет-кар! и пусть на языке схем

Меня немного смущает результат этого примера:

(define mk-q
  (lambda ()
    (let ([l '(x)])
      (cons l l))))


(define q (mk-q))

q
=> ((x) x)

(set-car! (cdr q) 'y)
=> ((y) y)

Мне интересно, почему оба атома xбыли заменены на набор-автомобиль! Процедура (мое первое предположение о том, каким будет результат, было ((x) y))?

Например:

(define mk-q2
  (lambda ()
    (let ([l '(x)])
      (cons l (cons l l)))))

(define q2 (mk-q2))
(set-car! (cdr q2) 'y)
=> ((x) y x) which fits my understanding of set-car!

Почему оба xs в первом примере заменены?

5
задан Sam Tobin-Hochstadt 18 June 2012 в 01:31
поделиться