Exercise 2.22. Louis Reasoner tries to rewrite the first square-list procedure of exercise 2.21 so that it evolves an iterative process: (define (square-list items) (define (iter things answer) (if (null? things) answer (iter (cdr things) (cons (square (car things)) answer)))) (iter items nil)) Unfortunately, defining square-list this way produces the answer list in the reverse order of the one desired. Why? Louis then tries to fix his bug by interchanging the arguments to cons: (define (square-list items) (define (iter things answer) (if (null? things) answer (iter (cdr things) (cons answer (square (car things)))))) (iter items nil)) This doesn't work either. Explain. ———————————————————————————————————————————————————————————————————————— The answer is reversed because car gives the first item in the input list, while cons adds an item to the front of the answer list. Since only one pass is made over the data, the first item added to the answer corresponds to the first input item, but it ends up being the last element in the output. The second version doesn't work because instead of a list, Louis ends up with something else, with the nil at the front, as if by: (cons (cons (cons nil 1) 2) 3)