# [plt-scheme] help with higher order functions

Following part IV of HtDP, plus a guess at multi-argument functions
in a () - language:
#lang scheme
(require test-engine/scheme-tests)
;; add-lists: (listof number) (listof number) -> (listof number)
;; consumes: two lists of numbers
;; produces: the item-wise sum (ala vector addition)
(define (add-lists.v1 l1 l2)
(cond
[(empty? l1) empty]
[(cons? l1) (cons (+ (first l1) (first l2)) (add-lists (rest l1)
(rest l2)))]))
(define (add-lists l1 l2) (foldr (lambda (x y r) (cons (+ x y) r))
'() l1 l2))
(check-expect (add-lists '(1 2 3) '(4 5 6)) '(5 7 9))
(test)
On Mar 18, 2009, at 10:42 AM, Todd O'Bryan wrote:
>* What is the proper Scheme idiom to write this function?
*>*
*>* ;; add-lists: (listof number) (listof number) -> (listof number)
*>* ;; consumes: two lists of numbers
*>* ;; produces: the item-wise sum (ala vector addition)
*>* (define (add-lists l1 l2)
*>* (cond
*>* [(empty? l1) empty]
*>* [(cons? l1) (cons (+ (first l1) (first l2))
*>* (add-list (rest l1) (rest l2)))]))
*>*
*>* I guess what I want is something like a zip function. There must be a
*>* standard way to process lists in parallel, but I don't know what it
*>* is.
*>*
*>* Todd
*>*
*>* P.S. Still working on the nifty assignment. I got distracted by
*>* figuring out how to do bitmaps.
*>* _________________________________________________
*>* For list-related administrative tasks:
*>* http://list.cs.brown.edu/mailman/listinfo/plt-scheme
*