;; ;; Examples using abstract list functions ;; ;; --------------------------- map -------------------------------- ;; add1*: (listof Number) -> (listof Number) ;; adds 1 to all numbers in l (define (add1* l) (cond [(empty? l) empty] [else (cons (add1 (first l)) (add1* (rest l)))])) ;; Examples/Tests (empty? (add1* empty)) (equal? (add1* (list 1 2 3)) (list 2 3 4)) ;; add1*/map: (listof Number) -> (listof Number) ;; adds 1 to all numbers in l (define (add1*/map l) (map add1 l)) ;; Examples/Tests (empty? (add1*/map empty)) (equal? (add1*/map (list 1 2 3)) (list 2 3 4)) ;; --------------------------- filter -------------------------------- ;; negs: (listof Number) -> (listof Number) ;; produces a list of on only the negative numbers in l (define (negs l) (cond [(empty? l) empty] [else (cond [(negative? (first l)) (cons (first l) (negs (rest l)))] [else (negs (rest l))])])) ;; Examples/Test (empty? (negs empty)) (equal? (negs (list 1 -1)) (list -1)) ;; negs/filter: (listof Number) -> (listof Number) ;; produces a list of on only the negative numbers in l (define (negs/filter l) (filter negative? l)) ;; Examples/Test (empty? (negs/filter empty)) (equal? (negs/filter (list 1 -1)) (list -1)) ;; --------------------------- foldr -------------------------------- ;; sum: (listof Number) -> Number ;; sums the numbers is l (define (sum l) (cond [(empty? l) 0] [else (+ (first l) (sum (rest l)))])) ;; Examples/Tests (zero? (sum empty)) (= (sum (list 1 2 3)) 6) ;; sum/foldr: (listof Number) -> Number ;; sums the numbers is l (define (sum/foldr l) (foldr + 0 l)) ;; Examples/Tests (zero? (sum/foldr empty)) (= (sum/foldr (list 1 2 3)) 6