Write a recursive function that accepts a list l and a number n and returns the nth element of l (0th element is leftmost).
$ cat nle.rkt #lang racket (define (nth-list-element-generic f) ; Return a function accepting a list l and a whole number n ; that calls (f l n) to return the nth element of l (0th ; element is leftmost) if n is in the range [0..(length l)); ; otherwise the function throws an exception. (lambda (l n) (if (and (<= 0 n) (< n (length l))) (f l n) (error (format "the element index ~a is out of the range [0..~a)" n (length l)))))) (define nth-list-element-recursive (nth-list-element-generic (lambda (l n) (let loop ((l l) (n n)) (if (zero? n) (car l) (loop (cdr l) (- n 1))))))) (define nth-list-element-iterative (nth-list-element-generic (lambda (l n) (do ((l l (cdr l)) (n n (- n 1))) ((zero? n) (car l)) (void))))) (require rackunit "utl.rkt") (define (test-it f n) (let ((l (vector->list (iota-vector n))) (ce (lambda (l n) (check-exn exn:fail? (lambda () (f l n)))))) (do ((i 0 (+ i 1))) ((= i n) (void)) (check-eq? (f l i) i)) (ce '() 0) (ce l -1) (ce l n))) (test-it nth-list-element-recursive 10) (test-it nth-list-element-iterative 10) $ racket nle.rkt $