>
; recursion play ; build from '() after reaching the end of the list (define (doubleIt theList) (if (null? theList) '() (append (list (* 2 (car theList))) (doubleIt (cdr theList))))) ; This option uses two parameters, builds result as recursive calls are made ; Result is simply returned when the end of input is reached (define dblIt (lambda (input result) (cond ((and (null? input) (null? result)) #f) ; see if done with input ((null? input) result) ; see if car is even (else (dblIt (cdr input) (append result (list (* 2 (car input))))))))) (define traceDblIt (lambda (input result) (display "parameter theList ") (display input) (display "\nparameter: accumulated result") (display result) (newline) (cond ((and (null? input) (null? result)) #f) ; see if done with input ((null? input) (begin (display "returning result ") result)) ; see if car is even (else (traceDblIt (cdr input) (append result (list (* 2 (car input))))))))) (define (traceDoubleIt theList) (display "parameter theList ") (display theList) (newline) (if (null? theList) '() (let ((partialResult (traceDoubleIt (cdr theList))) (myContribution (list (* 2 (car theList))))) (begin (display "appending doubled item ") (display myContribution) (display " to the return of ") (display partialResult) (display #\newline) (append (list (* 2 (car theList))) partialResult)) ))) ;(append (list (* 2 (car theList))) (traceDoubleIt (cdr theList))))) (display "demo of recursion\n") (display "calling DoubleIt on '(2 3 5)\n") (traceDoubleIt '(2 3 5)) (display #\newline) (display "calling DblIt on '(2 3 5)\n") (traceDblIt '(2 3 5) '())