Download presentation
Presentation is loading. Please wait.
Published byAsher McGee Modified over 8 years ago
1
David Evans http://www.cs.virginia.edu/~evans CS200: Computer Science University of Virginia Computer Science Lecture 8: Cons car cdr sdr wdr
2
3 February 2003CS 200 Spring 20032 Menu History of Scheme –LISP Lists List Recursion
3
3 February 2003CS 200 Spring 20033 Confusion Is Good! It means you are learning new ways of thinking.
4
3 February 2003CS 200 Spring 20034 History of Scheme Scheme [1975] –Guy Steele and Gerry Sussman –Originally “Schemer” –“Conniver” [1973] and “Planner” [1967] Based on LISP –John McCarthy (late 1950s) Based on Lambda Calculus –Alonzo Church (1930s) –Last few lectures in course
5
3 February 2003CS 200 Spring 20035 LISP “Lots of Insipid Silly Parentheses” “LISt Processing language” Lists are pretty important – hard to write a useful Scheme program without them.
6
3 February 2003CS 200 Spring 20036 Making Lists
7
3 February 2003CS 200 Spring 20037 Making a Pair > (cons 1 2) (1. 2) 1 2 cons constructs a pair
8
3 February 2003CS 200 Spring 20038 Splitting a Pair > (car (cons 1 2)) 1 > (cdr (cons 1 2)) 2 1 2 cons car cdr car extracts first part of a pair cdr extracts second part of a pair
9
3 February 2003CS 200 Spring 20039 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 matters unless you have an IBM 704 Think of them as first and rest (define first car) (define rest cdr)
10
3 February 2003CS 200 Spring 200310 Implementing cons, car and cdr Using PS2: (define cons make-point) (define car x-of-point) (define cdr y-of-point) As we implemented make-point, etc.: (define (cons a b) (lambda (w) (if (w) a b))) (define (car pair) (pair #t) (define (cdr pair) (pair #f)
11
3 February 2003CS 200 Spring 200311 Pairs are fine, but how do we make threesomes?
12
3 February 2003CS 200 Spring 200312 Threesome? (define (threesome a b c) (lambda (w) (if (= w 0) a (if (= w 1) b c)))) (define (first t) (t 0)) (define (second t) (t 1)) (define (third t) (t 2)) Is there a better way of thinking about our triple?
13
3 February 2003CS 200 Spring 200313 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)))
14
3 February 2003CS 200 Spring 200314 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)))
15
3 February 2003CS 200 Spring 200315 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 list (any length tuple) is a pair where the second part is a …?
16
3 February 2003CS 200 Spring 200316 Lists List ::= (cons Element List ) A list is a pair where the second part is a list. One little problem: how do we stop? This only allows infinitely long lists!
17
3 February 2003CS 200 Spring 200317 Recursive Transition Networks ARTICLEADJECTIVE NOUN end begin ORNATE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVE ADJECTIVE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVE ADJECTIVE ADJECTIVE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVE ADJECTIVE ADJECTIVE ADJECTIVE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVE ADJECTIVE ADJECTIVE ADJECTIVE ADJECTIVE NOUN From Lecture 6
18
3 February 2003CS 200 Spring 200318 Recursive Transition Networks ARTICLEADJECTIVE NOUN end begin ORNATE NOUN ORNATE NOUN ::= ARTICLE ADJECTIVES NOUN ADJECTIVES ::= ADJECTIVE ADJECTIVES ADJECTIVES ::=
19
3 February 2003CS 200 Spring 200319 Lists List ::= (cons Element List ) List ::= A list is either: a pair where the second part is a list or, empty It’s hard to write this!
20
3 February 2003CS 200 Spring 200320 Null List ::= (cons Element List ) List ::= A list is either: a pair where the second part is a list or, empty ( null ) null
21
3 February 2003CS 200 Spring 200321 List Examples > null () > (cons 1 null) (1) > (list? null) #t > (list? (cons 1 2)) #f > (list? (cons 1 null)) #t
22
3 February 2003CS 200 Spring 200322 More List Examples > (list? (cons 1 (cons 2 null))) #t > (car (cons 1 (cons 2 null))) 1 > (cdr (cons 1 (cons 2 null))) (2)
23
3 February 2003CS 200 Spring 200323 List Recursion
24
3 February 2003CS 200 Spring 200324 Defining Recursive Procedures 1.Be optimistic. –Assume you can solve it. –If you could, how would you solve a bigger problem. 2.Think of the simplest version of the problem, something you can already solve. (This is the base case.) 3.Combine them to solve the problem.
25
3 February 2003CS 200 Spring 200325 Defining Recursive Procedures 1.Be optimistic. –Assume you can solve it. –If you could, how would you solve a bigger problem. 2.Think of the simplest version of the problem, something you can already solve. 3.Combine them to solve the problem. on Lists Be very optimistic For lists, assume we can solve it for the cdr For lists, the simplest version is usually null (the zero-length list) Combine something on the car of the list with the recursive evaluation on the cdr. Remember to test null? before using car or cdr.
26
3 February 2003CS 200 Spring 200326 Defining Sumlist (define sumlist (lambda (lst) (if (null? lst) ( (car lst) (sumlist (cdr lst)) 0 + > (sumlist (list 1 2 3 4)) 10 > (sumlist null) 0
27
3 February 2003CS 200 Spring 200327 Defining Productlist (define productlist (lambda (lst) (if (null? lst) ( (car lst) (sumlist (cdr lst)) 1 * > (productlist (list 1 2 3 4)) 24 > (productlist null) 1
28
3 February 2003CS 200 Spring 200328 Defining Length (define length (lambda (lst) (if (null? lst) ( (car lst) (length (cdr lst)) 0 + > (length (list 1 2 3 4)) 4 > (length null) 0 1
29
3 February 2003CS 200 Spring 200329 Defining insertl (define insertl (lambda (lst f stopval) (if (null? lst) stopval (f (car lst) (insertl (cdr lst) f stopval)))))
30
3 February 2003CS 200 Spring 200330 Definitions (define (sumlist lst) (insertl lst + 0)) (define (productlist lst) (insertl lst * 1)) (define (length lst) (insertl lst (lambda (head rest) (+ 1 rest)) 0)) (define insertl (lambda (lst f stopval) (if (null? lst) stopval (f (car lst) (insertl (cdr lst) f stopval)))))
31
3 February 2003CS 200 Spring 200331 Charge Next Time: lots more things you can do with lists (including the peg board puzzle!) PS3 Out Today –Use lists to make fractals –You have seen everything you need for it after today –Due next week Wednesday
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.