(define square (lambda (n) (* n n)))

(define (map proc items)
  (if (null? items)
      '()
      (cons (proc (car items))
	    (map proc (cdr items)))))



(map square '(-1 -2 0 4 -42))
(map abs '(-1 -2 0 4 -42))
(define (abs-all items) (map abs items))
(define (square-all items) (map square  items))


(square-all '(1 2 3 4))

(square-all '(1 (+ 2 3) 3 4))  ;; error

(square-all (list 1 (+ 2 3) 3 4)  ;; ok
(square '(+ 1 2)) ;; error
