5
我用這個例子的結果混淆點點:套車!而讓方案語言
(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
原子被set-car!
程序替換(我的第一個猜測是什麼結果將是爲((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!
爲什麼都x
S IN的第一個例子更換?
因爲cons單元實際上是兩個指針值。當你寫'(缺點)'時,你創建了兩個指向同一個對象的指針。當您更改對象時,兩個條目仍然指向同一個對象。 –
我最初誤解爲set-carl,這在一種青少年的飢餓中很有趣。 – Bill