; Preconditions: special conditions that need to be true for your procedure ; to work ; ; we will give specific error messages when the user does not follow the ; preconditions ; ; example of a procedure that needs preconditions: ;(define add-pairs ; (lambda (ls) ; (if (null? ls) ; '() ; (cons (+ (car ls) (cadr ls)) (add-pairs (cddr ls)))))) ; What are the preconditions on ls? ; ls needs to be of even length, we can test this with (even? (length ls)) ; also, all elements of ls need to be numbers (define all-numbers? (lambda (ls) (if (null? ls) #t (if (number? (car ls)) (all-numbers? (cdr ls)) #f)))) (define all-numbers2? (lambda (ls) (or (null? ls) (and (number? (car ls)) (all-numbers2? (cdr ls)))))) ;(define add-pairs ; (lambda (ls) ; (if (not (all-numbers? ls)) ; (error "add-pairs: needs the input to be a list of all numbers") ; (if (odd? (length ls)) ; (error "add-pairs: need a an even-length list") ; (if (null? ls) ; '() ; (cons (+ (car ls) (cadr ls)) (add-pairs (cddr ls)))))))) (define add-pairs (lambda (ls) (if (not (all-numbers? ls)) (error "add-pairs: needs the input to be a list of all numbers") (if (odd? (length ls)) (error "add-pairs: need a an even-length list") (add-pairs-kernel ls))))) (define add-pairs-kernel (lambda (ls) (if (null? ls) '() (cons (+ (car ls) (cadr ls)) (add-pairs-kernel (cddr ls))))))