Son varsayımınız doğru. Nokta, işaretçi değerinin nerede olduğunu gösterir, okun işaret ettiği çift kutunun tamamı hedeftir. Yan, üst orta, üst sol veya üst sağa işaret ediyorsa farketmez. Nesnenin "adresi" olan bütün çift.
Nesnenin bir kısmına, car
ve cdr
numaralı parçalara erişmeden bölümün bir bölümünü gösteremezsiniz. Yaptığın ikincisi, dolaylı bir işaretçi değil, işaret ettiği her şeye sahipsin. (car '(a b)) ; ==> a
ve a
'un, çöp toplanıncaya kadar işaret eden listenin hiçbir özü yoktur.
Biz artık şöyle bunu göstermek olabilir: Sonraki iki car
ve cdr
iken
[=#1|#3|#2]
[=#2|#3|()]
[=#3|a |#4]
[=#4|b |()]
= # ile ilk değer, kutunun kendisi konumudur. Yukarıda, x
adres # 3 puan ve # 1 ila z1
. Gördüğünüz gibi en z2
[=#5|#6|#8]
[=#6|a |#7]
[=#7|b |()]
[=#8|#9|()]
[=#9|a |#10]
[=#10|b |()]
yapalım, z2
onun listesinin her iki eleman ile aynı nesneyi yeniden olmadığından z1
ikiden fazla cons
kullanır, ancak bireysel benzer görünümlü listelerini kullanır.Çizimlerde, car
ve cdr
z1
10 her ikisi de aynı listede x
numaralı listeye işaret etmektedir. z2
iki farklı listelerine puan, ama bu listelerde elemanları aynıdır.
Bunun nedeni sembolleri singletons olmasıdır. Böylece, sadece a
için bir sembol nesnesi var ve iki farklı yerde 'a
değerlendirerek olacak aynı a
hem nokta. Diğer singletonların #f
, #t
ve ()
cons
her zaman taze kana oluşturur ve list
birlikte o cons
argümanlar sadece bir prosedürdür. Böylece ifadede aynı kod (list 'a 'b)
iki yerde sadece aynı bakmak iki farklı nesneleri yapar.
(eq? (car z1) (cdr z1)) ; ==> #t same object
(eq? (car z2) (cdr z2)) ; ==> #f not same object
(equal? (car z2) (cdr z2)) ; ==> #t they look the same, but they are not the same. (created at different places)
Belirtilen veriler, program başlamadan önce bir kerede oluşturulduğu gibi görülebilir. Böylece bu tanımlanmamıştır.
(eq? '(a b) '(a b)) ; ==> #t or #f (undefined)
(eq? '(b c) (cdr '(a b c))) ; ==> #t or #f (undefined)
nedeni Şeması yapısı z1
ile olduğundan verileri aynı şekilde yeniden izin değil, zorunlu olmasıdır.
Neden özellikle bir çift bir araba ya cdr işaret edemez? Sadece kongre mi? – Aaron
Şema (ve Lisp) C değildir; kendi başına adresleri yoktur. Bu, (kavramsal olarak) her zaman bir nesneye atıfta bulunduğu nesne referanslarına sahiptir. Bu yüzden, bir dezavantajları hücreye bir amacı, bir referans bütün dezavantajları hücre (genellikle olumsuz yönleri hücrenin başlangıç konumu için bir işaretçi olarak uygulanan olsa bile), bir dizeye bir amacı, bir referans bütün dizisini belirtir belirtir (ve dizedeki tek tek karakterler), bir vektöre bir nesne referansı, tüm vektörü, vs. ifade eder. –