#lang racket ; Sample list for testing (define ints (list 4 0 -3 43 7 -273 -111 251 -6 5)) (define sum (lambda (ns) (if (null? ns) 0 (+ (first ns) (sum (rest ns)))))) (define sum-between (lambda (lo hi) (sum (range lo (+ hi 1))))) (define product (lambda (ns) (if (null? ns) 1 (* (first ns) (product (rest ns)))))) (define fact (lambda (n) (product (range 1 (+ n 1))))) (define minlist (lambda (ns) (if (null? ns) +inf.0 (min (first ns) (minlist (rest ns)))))) (define maxlist (lambda (ns) (if (null? ns) -inf.0 (max (first ns) (maxlist (rest ns)))))) (define all-true? (lambda (bs) (if (null? bs) #t (and (first bs) (all-true? (rest bs)))))) (define some-true? (lambda (bs) (if (null? bs) #f (or (first bs) (all-true? (rest bs)))))) (define all-true-as-accumulator? (lambda (bs) (if (null? bs) #t ((λ (b1 b2) (and b1 b2)) (first bs) (all-true-as-accumulator? (rest bs)))))) (define my-length (lambda (xs) (if (null? xs) 0 (+ 1 (my-length (rest xs)))))) (define my-length-as-accumulator (lambda (xs) (if (null? xs) 0 ((λ (f subresult) (+ 1 subresult)) (first xs) (my-length-as-accumulator (rest xs)))))) (define map-double (λ (ns) (if (null? ns) null ; '() or (list) or ns (cons (* 2 (first ns)) (map-double-as-accumulator (rest ns)))))) (define map-double-as-accumulator (λ (ns) (if (null? ns) null ; '() or (list) or ns ((λ (fst subresult) (cons (* 2 fst) subresult)) (first ns) (map-double-as-accumulator (rest ns)))))) (define filter-positive (λ (ns) (if (null? ns) null (if (> (first ns) 0) (cons (first ns) (filter-positive (rest ns))) (filter-positive (rest ns)))))) (define filter-positive-as-accumulator (λ (ns) (if (null? ns) null ((λ (fst subresult) (if (> fst 0) (cons fst subresult) subresult)) (first ns) (filter-positive-as-accumulator (rest ns))))))