SICP — Scheme/JS Structure and Interpretation of Computer Programs — Comparison Edition
Original Python
Figure 2.7 The sequence 1, 2, 3, 4 represented as a chain of pairs.
Figure 2.8 The sequence 1, 2, 3, 4 represented as a chain of pairs.
Original Python
Original Python

[1] In this book, we use list linked list to mean a chain of pairs terminated by the end-of-list markerend-of-linked-list marker. In contrast, the term list structure linked-list structure refers to any data structure made out of pairs, not just to lists. linked lists.
[2] Since nested applications of car and cdr are cumbersome to write, Lisp dialects provide abbreviations for them—for instance, (cadr $\langle arg \rangle$) = (car (cdr $\langle arg \rangle$)) The names of all such procedures start with c and end with r. Each a between them stands for a car operation and each d for a cdr operation, to be applied in the same order in which they appear in the name. The names car and cdr persist because simple combinations like cadr are pronounceable.
[3] It's remarkable how much energy in the standardization of Lisp dialects has been dissipated in arguments that are literally over nothing: Should nil be an ordinary name? Should the value of nil be a symbol? Should it be a list? Should it be a pair? In Scheme, nil is an ordinary name, which we use in this section as a variable whose value is the end-of-list marker (just as true is an ordinary variable that has a true value). Other dialects of Lisp, including Common Lisp, treat nil as a special symbol. The authors of this book, who have endured too many language standardization brawls, would like to avoid the entire issue. Once we have introduced quotation in section 2.3, we will denote the empty list as '() and dispense with the variable nil entirely.
[4] The value None is used in Python for various purposes, as we shall see in chapter 3.
[5] Our Python environment provides a primitive function print_llist that works like the primitive function print, except that it uses linked-list notation instead of box notation.
[6] Scheme standardly provides a map procedure that is more general than the one described here. This more general map takes a procedure of $n$ arguments, together with $n$ lists, and applies the procedure to all the first elements of the lists, all the second elements of the lists, and so on, returning a list of the results. For example: (map + (list 1 2 3) (list 40 50 60) (list 700 800 900)) (741 852 963) (map (lambda (x y) (+ x (* 2 y))) (list 1 2 3) (list 4 5 6))
2.2.1   Representing Sequences