; the version on p. 79 (define list-ref1 ; : (-> ((list datum) natural) datum) (lambda (ls n) (cond ((<= (length ls) n) (error "list-ref: Index" n "out of range for list" ls)) ((zero? n) (car ls)) (else (list-ref1 (cdr ls) (sub1 n)))))) ;; on p. 80 following is list-ref-helper (define speedy-list-ref (lambda (ls n) ; REQUIRES: (> (length ls) n) (if (zero? n) (car ls) (speedy-list-ref (cdr ls) (sub1 n))))) (define careful-list-ref (lambda (ls n) (cond ((<= (length ls) n) (error "list-ref: Index" n "out of range for list" ls)) (else (speedy-list-ref ls n))))) ; - Program 3.7, pg. 81 - ; count while going down list (define list-ref (lambda (ls n) (cond ((null? ls) (error "list-ref: Index" n "out of range for list" ls)) ((zero? n) (car ls)) (else (list-ref (cdr ls) (sub1 n))))))