Functional Problem Solving (CSC 151 2013F) : Outlines
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] [FAQ] [IRC] [Teaching & Learning] [Grading]
Current: [Assignment] [EBoard] [Lab] [Outline] [Partners] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Setup] - [Functions A-Z] [Functions By Topic] - [Racket] [Scheme Report (R5RS)] [R6RS] [TSPL4]
Related Courses: [Davis (2013F)] [Rebelsky (2010F)] [Weinman (2012F)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)]
Held: Wednesday, 9 October 2013
Back to Outline 23 - Revisiting Lists. On to Outline 25 - Pause for breath.
Summary
We begin our exploration of recursion, the most general form of repetition available in Scheme. You can use recursion to both build and iterate over different kinds of values.
Related Pages
Overview
Administrivia
map and for-each image-variant, image-transform!,
and image-compute-pixels!.repeat.Remember that I tend to think in abstractions first. But we'll look at some concrete forms, too.
Here's the form of a typical recursive procedure:
(define *proc*
(lambda (*val*)
(if (*base-case-test*)
(*base-case* *val*)
(*combine* (*partof* *val*)
(*proc* (*update* *val*))))))
When the value you're working with is a list and your base case is the null list, the form is somewhat simpler:
(define *proc*
(lambda (*lst*)
(if (null? *lst*)
*null-case*
(*combine* (*onestep* (car *lst*))
(*proc* (cdr *lst*))))))
Sometimes it's useful to grab the recursive result first, particularly if you're going to use it in multiple ways.
(define *proc*
(lambda (*lst*)
(if (null? *lst*)
*null-cse*
(let ((recursive-result (*proc* (cdr *lst*))))
(if (*test*)
(*combine1* (*step1* (car *lst*)) recursive-result)
(*combine2* (*step2* (car *lst*)) recursive-result))))))
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] [FAQ] [IRC] [Teaching & Learning] [Grading]
Current: [Assignment] [EBoard] [Lab] [Outline] [Partners] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Setup] - [Functions A-Z] [Functions By Topic] - [Racket] [Scheme Report (R5RS)] [R6RS] [TSPL4]
Related Courses: [Davis (2013F)] [Rebelsky (2010F)] [Weinman (2012F)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)]
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.)

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.