class 6: programming with data david evans cs1120 fall 2009
TRANSCRIPT
![Page 1: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/1.jpg)
Class 6:Programming with Data
David Evanscs1120 Fall 2009
![Page 2: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/2.jpg)
2
Ways to Design Programs
1. Think about what you want to do, and turn that into code.
2. Think about what you need to represent, and design your code around that.
Which is better?
![Page 3: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/3.jpg)
3
History of Scheme• Scheme [Guy Steele & Gerry Sussman, 1975]
Guy Steele co-designed Scheme and created the first Scheme interpreter for his 4th year project
More recently, Steele specified Java [1995]– “Conniver” [1973] and “Planner” [1967]
• Based on LISP [John McCarthy, 1958]–Based on Lambda Calculus [Alonzo Church,
1930s]– Last few lectures in course
![Page 4: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/4.jpg)
4
LISP
“Lots of Insipid Silly Parentheses”
“LISt Processing language”
Lists are pretty important – hard to write a useful Scheme program without them.
![Page 5: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/5.jpg)
5
Making Lists
![Page 6: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/6.jpg)
6
Making a Pair
> (cons 1 2)(1 . 2)
cons constructs a pair
1 2
![Page 7: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/7.jpg)
7
Splitting a Pair> (car (cons 1 2))1> (cdr (cons 1 2))2
car extracts first part of a paircdr extracts second part of a pair
1 2
car cdr
![Page 8: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/8.jpg)
8
Pair Examples> (cons (cons 1 2) 3))((1 . 2) 3)> (cdr (car (cons (cons 1 2) 3)))2> (car (car (cons 1 (cons 2 3))))car: expects argument of type <pair>; given 1
![Page 9: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/9.jpg)
9
Why “car” and “cdr”?• Original (1950s) LISP on IBM 704– Stored cons pairs in memory registers– car = “Contents of the Address part of the Register”– cdr = “Contents of the Decrement part of the Register”
(“could-er”)• Doesn’t matter unless you have an IBM 704• Think of them as first and rest
(define first car)(define rest cdr)
(The DrScheme “Pretty Big” language already defines these, but they are not part of standard Scheme)
![Page 10: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/10.jpg)
10
Implementing cons, car and cdr
(define (cons a b) (lambda (w) (if w a b)))
(define (car pair) (pair #t)(define (cdr pair) (pair #f)
Scheme provides primitive implementations for cons, car, and cdr. But, we could define them ourselves.
![Page 11: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/11.jpg)
11
Pairs are fine, but how do we make threesomes?
![Page 12: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/12.jpg)
12
Triple
A triple is just a pair where one of the parts is a pair!
(define (triple a b c) (cons a (cons b c)))(define (t-first t) (car t))(define (t-second t) (car (cdr t))) (define (t-third t) (cdr (cdr t)))
![Page 13: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/13.jpg)
13
Quadruple
A quadruple is a pair where the second part is a triple
(define (quadruple a b c d) (cons a (triple b c d)))(define (q-first q) (car q))(define (q-second q) (t-first (cdr t))) (define (q-third t) (t-second (cdr t)))(define (q-fourth t) (t-third (cdr t)))
![Page 14: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/14.jpg)
14
Multuples
• A quintuple is a pair where the second part is a quadruple
• A sextuple is a pair where the second part is a quintuple
• A septuple is a pair where the second part is a sextuple
• An octuple is group of octupi• A ? is a pair where the second part is a …?
![Page 15: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/15.jpg)
15
Lists
List ::= (cons Element List)
A list is a pair where the second part is a list.
One big problem: how do we stop?This only allows infinitely long lists!
![Page 16: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/16.jpg)
16
Lists
List ::= (cons Element List)List ::=
A list is either: a pair where the second part is a listor, empty
It’s hard to write this!
![Page 17: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/17.jpg)
17
Null
List ::= (cons Element List)List ::=
A list is either: a pair where the second part is a listor, empty (null)
null
![Page 18: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/18.jpg)
18
Returning Problem Sets Problem
Input: unordered set of cs1120 studentsOutput: cs1120 students in lexicographic order
by UVa ID
What is a good algorithm for getting all of you in order by UVa ID?
![Page 19: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/19.jpg)
19
Recap
• A List is either: a Pair where the second part is a List
or null • Pair primitives:
(cons a b) Construct a pair <a, b>(car pair) First part of a pair(cdr pair) Second part of a pair
![Page 20: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/20.jpg)
20
List Examples> null()> (cons 1 null)(1)> (list? null)#t> (list? (cons 1 2))#f> (list? (cons 1 null))#t
![Page 21: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/21.jpg)
21
More List Examples
> (list? (cons 1 (cons 2 null)))#t> (car (cons 1 (cons 2 null)))1> (cdr (cons 1 (cons 2 null)))(2)
![Page 22: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/22.jpg)
22
Problem Set 2:Programming with Data
• Representing a card
car cdr
Pair of rank (Ace) and suit (Spades)
![Page 23: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/23.jpg)
23
Problem Set 2:Programming with Data
• Representing a card: (define (make-card rank suit) (cons rank suit))
• Representing a hand
(list (make-card Ace clubs) (make-card King clubs) (make-card Queen clubs) (make-card Jack clubs) (make-card 10 clubs))
![Page 24: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/24.jpg)
24
list-trues
Define a procedure that takes as input a list, and produces as output the number of non-false values in the list.
(list-trues null) 0(list-trues (list 1 2 3)) 3(list-trues (list false (list 2 3 4))) 1
![Page 25: Class 6: Programming with Data David Evans cs1120 Fall 2009](https://reader036.vdocument.in/reader036/viewer/2022062620/5519df195503467a178b46f3/html5/thumbnails/25.jpg)
25
Charge• Now, you know everything you need for
Problem Set 2 (and PS3 and PS4)– Help hours Sunday, Monday, Tuesday, Wednesday
• Probably a Quiz Wednesday– Course book through Sec. 5.4 and GEB reading– PS1 Comments
• Class Wednesday and Friday:– Lots of examples programming with procedures
and recursive definitions