Skip to content

list-transform

; Apply scaling operation
(define (scale-list items factor)
    (if (null? items)
        items
        (cons (* (car items) factor)
              (scale-list (cdr items) factor))))

(scale-list (list 1 2 3 4 5) 10) ; (10 20 30 40 50)

; Abstracting the higher level idea `map`
(define (map proc items)
    (if (null? items)
        items
        (cons (proc (car items))
              (map proc (cdr items)))))

(map abs (list -10 2.5 -11.6 17)) ; (10 2.5 11.6 17)
(map square (list 4 5 6 10)) ; (16 25 36 100)
(map (lambda (x) (+ x 1)) (list 1 4 7 9)) ; (2 5 8 10)

; scale-list in terms of map
(define (scale-list items factor)
    (map (lambda (x) (* x factor)) items))

(scale-list (list 1 2 3 4 5) 5) ; (5 10 15 20 25)