Scheme's special map
As mentioned in the previous article, the map function does the following:
map f(x) [1, 2, 3, 4, 5] -> [f(1), f(2), f(3), f(4), f(5)]
The Scheme family of languages provide a more advanced map function which allows the following:
map f(x, y) [1, 2, 3, 4] [a, b, c, d] -> [f(1, a), f(2, b), f(3, c), f(4, d)]
This version of map can take multiple lists, and a function with as many arguments as there are lists, and apply over every list at once to return a single list of answers. The only requirement is that all given lists must be the same length.
For more examples:
(define (zip lst1 lst2) (map list lst1 lst2)) (define (add-index lst) (map cons (range (length lst)) lst)) (define (square-list lst) (map * lst lst))