Functional Problem Solving (CSC 151 2013F) : EBoards

CSC151.02 2013F, Class 24: Recursion Basics


Overview

Admin

Welcome to "Pass the Buck" Problem Solving

Remove one element
Pass the remaining elemtns to our left to get a count
Add 1

(define toby-count (lambda (books) (+ 1 (alex-count (cdr books)))))

(define alex-count (lambda (books) (+ 1 (andrew-count (cdr books)))))

(define please-find-all-the-books-by-david-campbell-in-this-list (lambda (books) (if (null? books) null (let ([abook (car books)] ; The first book [rest (cdr books)]) ; All but the first book (if (is-by-david-cambell abook) (cons abook (please-find-all-the-books-by-david-campbell-in-this-list rest)) (please-find-all-the-books-by-david-campbell-in-this-list rest))))))

(map by-david-campbell? books) (for-each ? books) -> Returns nothing (repeat ? books) - Won't work with lists

We have learned a more general strategy for repetition.

(define proc (lambda (lst) (if (null? lst) simple-result (extend (proc (cdr lst))))))

(define length (lambda (lst) (if (null? lst) 0 (+ 1 (length (cdr lst))))))

(define bbdc (lambda (lst) (if (null? lst) null (magic (bbdc (cdr lst))))))

The idea of recursion

Lab


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2013 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.