Your last guess is correct. The dot indicates where the pointer value, the entire double square that the arrow points to, is the target. It doesnβt matter if it points to the side, upper middle, upper left or upper right. This is a whole couple, which is the "address" of the object.
You cannot specify a part of an object without accessing its part with car and cdr . The second thing you do, you have everything that it was aimed at, and not an indirect pointer. (car '(ab)) ; ==> a (car '(ab)) ; ==> a and a have no list entity that still points to it until garbage is collected.
We could illustrate this as follows:
[=#1|#3|#2] [=#2|#3|()] [=#3|a |#4] [=#4|b |()]
The first value with = # is the location of the window itself, and the next two are car and cdr . Above x points to address C # 3 and z1 to # 1. Let z2
[=#5|#6|#8] [=#6|a |#7] [=#7|b |()] [=#8|#9|()] [=#9|a |#10] [=#10|b |()]
As you can see, z2 uses two more cons than z1 , since it does not reuse the same object as both elements of its list, but uses separate similar lists.
In the drawings, both car and cdr of z1 point to the same list x . z2 points to two different lists, but the items in these lists are the same.
The reason for this is that the characters are single. That way, you only have one symbol object for a and a rating of 'a in two different places will point to the same a . Other singletones #f , #t and ()
cons always creates a new pair, and list is just a procedure in which cons together arguments. Thus, the same code (list 'a 'b) two places in the expression create two different objects that look the same.
(eq? (car z1) (cdr z1)) ; ==>
Quoted data can be seen as created all at once before starting the program. So it is undefined.
(eq? '(ab) '(ab)) ; ==>
The reason is that the scheme is allowed, but not required, to reuse data in the same way as with the z1 structure.