Functional Problem Solving (CSC 151 2013F) : EBoards
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)]
Overview
Admin
Nothing. No quiz.
First structure
(define tree-proc
(lambda (tree)
(if (pair? tree)
(combine (tree-proc (car tree))
(tree-proc (cdr tree)))
base-case)))
Second structure
(define tree-proc
(lambda (tree)
(if (pair? tree)
(let ((left-result (tree-proc (car tree)))
(right-result (tree-proc (cdr tree))))
(combine left-result right-result))
base-case)))
Analysis
height: recursive case?
(define height (lambda (tree) (if (pair? tree) (+ 1 (max (height (car tree)) (height (cdr tree)))) 0)))
Review:
Analysis
Recursive case:
Code
(define subvector->tree
(lambda (colors lower-index upper-index)
(if (= lower-index upper-index)
(vector-ref colors lower-index)
(let* ([left-lower lower-index]
[left-upper (floor (/ (+ lower-index upper-index) 2))]
[right-lower (+ left-upper 1)]
[right-upper upper-index])
(cons (subvector->tree colors left-lower left-upper)
(subvector->tree colors right-lower right-upper))))))
(define height-balanced
(lambda (tree)
(if (pair? tree)
(let ((left-result (height-balanced (car tree)))
(right-result (height-balanced (cdr tree))))
(cond
[(not left-result) #f]
[(not right-result) #f]
[(not (<= (abs (- left-result right-result)) 1)) #f]
[else (+ 1 left-result right-result)])))))
0)))
More elegant with ands and ors.
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.