I'm reading the book called the little schemer.
Before read that, i've finished reading first three chapter of SICP.
My question is that why second argument to cons must be a list.
However, (cons a b) works for all values a and b and
(car (cons a b)) = a
(cdr (cons a b)) = b
The second argument to cons is not necessarily a list. It's a list only if you're, well, building a list (proper or otherwise). It's perfectly valid if the cdr part of a cons cell is not a list, for example, when building an association list:
(define lookup-table (list (cons 'x 10) (cons 'y 20) (cons 'z 30)))
(assoc 'z lookup-table)
=> '(z . 30)