Lecture 6: Programming with Data CS150: Computer Science

Slides:



Advertisements
Similar presentations
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 6: Cons car cdr sdr wdr.
Advertisements

Class 6: Programming with Data David Evans cs1120 Fall 2009.
Class 21: Imperative Programming University of Virginia cs1120 David Evans.
1 Programming Languages (CS 550) Lecture Summary Functional Programming and Operational Semantics for Scheme Jeremy R. Johnson.
Cs1120 Fall 2009 David Evans Lecture 16: Power Analysis.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 16: Quicker Sorting.
David Evans CS150: Computer Science University of Virginia Computer Science Lecture 14: Asymptotic Growth.
Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section September 2008.
Lisp by Namtap Tapchareon Lisp Background  Lisp was developed by John McCarthy in  Lisp is derives from List Processing Language. 
Cs1120 Fall 2009 David Evans Lecture 20: Programming with State.
Cs1120 Fall 2009 David Evans Lecture 19: Stateful Evaluation.
David Evans Class 13: Quicksort, Problems and Procedures CS150: Computer Science University of Virginia Computer Science.
Functional Programming in Scheme
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 18: Think Globally, Mutate Locally.
David Evans CS200: Computer Science University of Virginia Computer Science Class 17: Mutation M. C. Escher, Day and Night.
David Evans CS150: Computer Science University of Virginia Computer Science Lecture 36: Modeling Computing.
Class 8: Recursing on Lists David Evans cs1120 Fall 2009.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 12: QuickSorting Queen’s University,
David Evans CS200: Computer Science University of Virginia Computer Science Class 16: Mutation M. C. Escher, Day and Night.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments.
David Evans CS150: Computer Science University of Virginia Computer Science Lecture 5: Recursing on Lists.
Scheme Profs Tim Sheard and Andrew Black CS 311 Computational Structures.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 18: Mutation M. C. Escher, Day and.
David Evans CS200: Computer Science University of Virginia Computer Science Class 32: The Meaning of Truth.
Class 7: List Procedures David Evans cs1120 Fall 2009.
David Evans CS150: Computer Science University of Virginia Computer Science Lecture 4: Programming with Data.
David Evans CS200: Computer Science University of Virginia Computer Science Lecture 8: Cons car cdr sdr wdr.
Functional Languages  A function is an “association of a certain object from one set (the range) with each object from another set (the domain)  A function.
(Thunking about Thunks)
Lecture 4: Metacircles Eval Apply David Evans
Lecture 17: Environments CS200: Computer Science
6.001 Jeopardy.
Lecture 4: Evaluation Rules Recursion CS200: Computer Science
Class 27: Universal Turing Machines CS150: Computer Science
Lecture 13: Quicksorting CS200: Computer Science
Class 30: Models of Computation CS200: Computer Science
Lecture 7: List Recursion CS200: Computer Science
CS 326 Programming Languages, Concepts and Implementation
Lecture 37: A Universal Computer
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
LISP LISt Processing.
Class 19: Think Globally, Mutate Locally CS150: Computer Science
Lecture 8: Recursion Practice CS200: Computer Science
Lecture 16: Quickest Sorting CS150: Computer Science
Lecture 11: All Sorts CS200: Computer Science University of Virginia
David Evans Lecture 9: The Great Lambda Tree of Infinite Knowledge and Ultimate Power CS200: Computer Science University.
Lecture 28: Types of Types
Lecture 13: Cost of Sorts CS150: Computer Science
Lecture #8 מבוא מורחב.
Lecture 22: P = NP? CS200: Computer Science University of Virginia
Lecture 10: Quicker Sorting CS150: Computer Science
Class 37: Making Lists, Numbers and Recursion from Glue Alone
Lecture 26: The Metacircular Evaluator Eval Apply
Lisp, Then and Now.
Class 33: Making Recursion M.C. Escher, Ascending and Descending
Lecture 9: The Great Lambda Tree of Knowledge and Power
LISP LISt Processing.
Abstraction and Repetition
Class 34: Models of Computation CS200: Computer Science
Class 33: Learning to Count CS200: Computer Science
Cs1120 Fall 2009 David Evans Lecture 10: Fracturing Fractals cs1120 Fall 2009 David Evans
Lecture 3: Rules of Evaluation CS200: Computer Science
LISP LISt Processing.
Class 26: Modeling Computing CS150: Computer Science
Lecture 15: Quicker Sorting CS150: Computer Science
Lecture 11: Sorting Grounds and Bubbles
CS 403: Programming Languages
Lecture 8: Recursing Lists CS150: Computer Science
LISP primitives on sequences
Lecture 25: The Metacircular Evaluator Eval Apply
Presentation transcript:

David Evans http://www.cs.virginia.edu/evans Lecture 6: Programming with Data CS150: Computer Science University of Virginia Computer Science David Evans http://www.cs.virginia.edu/evans

Ways to Design Programs Think about what you want to do, and turn that into code. Think about what you need to represent, and design your code around that. Which is better?

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

LISP “Lots of Insipid Silly Parentheses” “LISt Processing language” Lists are pretty important – hard to write a useful Scheme program without them.

Making Lists

Making a Pair > (cons 1 2) (1 . 2) 1 2 cons constructs a pair

car extracts first part of a pair cdr extracts second part of a pair Splitting a Pair car cdr > (car (cons 1 2)) 1 > (cdr (cons 1 2)) 2 1 2 car extracts first part of a pair cdr extracts second part of a pair

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)

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.

Pairs are fine, but how do we make threesomes?

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)))

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)))

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 …?

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!

Lists List ::= (cons Element List) List ::= A list is either: It’s hard to write this! A list is either: a pair where the second part is a list or, empty

Null List ::= (cons Element List) List ::= null A list is either: a pair where the second part is a list or, empty (null)

List Examples > null () > (cons 1 null) (1) > (list? null) #t > (list? (cons 1 2)) #f > (list? (cons 1 null))

More List Examples > (list? (cons 1 (cons 2 null))) #t > (car (cons 1 (cons 2 null))) 1 > (cdr (cons 1 (cons 2 null))) (2)

Recap A list is either: a pair where the second part is a list or null (note: book uses nil) Pair primitives: (cons a b) Construct a pair <a, b> (car pair) First part of a pair (cdr pair) Second part of a pair

Problem Set 2: Programming with Data Representing a card car cdr Pair of rank (Ace) and suit (Spades)

Problem Set 2: Programming with Data Representing a card: (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)

length Define a procedure that takes as input a list, and produces as output the length of that list. (length null)  0 (length (list 1 2 3))  3 (length (list 1 (list 2 3 4)))  2

Charge Its okay if you are confused now. Lots of opportunities to get unconfused: Problem Set 2 (and PS3 and PS4) Lab hours Sunday, Tuesday, Wednesday, and Thursday Read the Course Book Class Wednesday and Friday – lots of examples programming with procedures and recursive definitions Office Hours (Wednesdays and Thursdays)