Module 4: Compound data: structures

Similar documents
Module 4: Compound data: structures

CS115 - Module 4 - Compound data: structures

Module 5: Lists. Readings: HtDP, Sections 9, 10.

Lists. Readings: HtDP, sections 9 and 10. Avoid 10.3 (uses draw.ss). CS 135 Winter : Lists 1

Module 3: New types of data

CS115 - Module 3 - Booleans, Conditionals, and Symbols

The design recipe. Readings: HtDP, sections 1-5. (ordering of topics is different in lectures, different examples will be used)

Module 8: Local and functional abstraction

Functional abstraction. What is abstraction? Eating apples. Readings: HtDP, sections Language level: Intermediate Student With Lambda

Functional abstraction

Working with recursion

Working with recursion. From definition to template. Readings: HtDP, sections 11, 12, 13 (Intermezzo 2).

CS 115 Lecture Notes Winter 2019

The Design Recipe Fall 2017

Outline. Helper Functions and Reuse. Conditionals. Evaluation Rules for cond. Design Recipe with cond. Compound Data

Local definitions and lexical scope

Local definitions and lexical scope. Local definitions. Motivating local definitions. s(s a)(s b)(s c), where s = (a + b + c)/2.

Module 8: Binary trees

CS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees. CS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees 1

The Design Recipe Fall 2018

Welcome to CS 135 (Winter 2018) Themes of the course. Lectures. cs135/ Instructors: Sandy Graham, Paul Nijjar

Style and Submission Guide

Observer Templates. CS 5010 Program Design Paradigms Lesson 1.4

Module 10: General trees

(Provisional) Lecture 08: List recursion and recursive diagrams 10:00 AM, Sep 22, 2017

Outline. Data Definitions and Templates Syntax and Semantics Defensive Programming

CS 135 Fall 2018 Final Exam Review. CS 135 Fall 2018 Final Exam Review 1

Module 9: Binary trees

Lists of Lists. CS 5010 Program Design Paradigms Bootcamp Lesson 6.5

Trees. Readings: HtDP, sections 14, 15, 16.

CS115 - Module 9 - filter, map, and friends

Lab 7: OCaml 12:00 PM, Oct 22, 2017

Trees. Binary arithmetic expressions. Visualizing binary arithmetic expressions. ((2 6) + (5 2))/(5 3) can be defined in terms of two smaller

Graphs. Directed graphs. Readings: Section 28

CS115 - Module 10 - General Trees

GOALS [HTDP/2e Chapters 1 through 3.5]

Assignment: 7. Due: Language level: Allowed recursion:

CS Final Exam Review Suggestions - Fall 2017

Module 01: Introduction to Programming in Python

CS Final Exam Review Suggestions - Spring 2014

ormap, andmap, and filter

The syntax and semantics of Beginning Student

The syntax and semantics of Beginning Student

Homework 6: Higher-Order Procedures Due: 11:59 PM, Oct 16, 2018

Local defini1ons. Func1on mul1ples- of

Graphs. Readings: Section 28. CS 135 Fall : Graphs 1

Module 9: Trees. If you have not already, make sure you. Read How to Design Programs Sections 14, 15, CS 115 Module 9: Trees

Trees. Example: Binary expression trees. Example: Evolution trees. Readings: HtDP, sections 14, 15, 16.

Racket Style Guide Fall 2017

Module 10: Imperative Programming, Modularization, and The Future

Lists of Lists. CS 5010 Program Design Paradigms Bootcamp Lesson 5.3

Types of recursion. Readings: none. In this module: a glimpse of non-structural recursion. CS 135 Winter : Types of recursion 1

Use recursion to write a function that duplicates the following function: (def (f L) (map (lambda (x) (+ (sqr x) x)) L))

Homework: Simple functions and conditionals

Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define

Implementing HtDP Teachpacks, Libraries, and Customized Teaching Languages

Homework 3: Recursion Due: 11:59 PM, Sep 25, 2018

CS558 Programming Languages

6.001 Notes: Section 8.1

Welcome to CS 115 (Winter 2019)

CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures

CS115 - Module 1. Cameron Morland. Fall Cameron Morland CS115 - Module 1

CS Lecture 5: Pattern Matching. Prof. Clarkson Fall Today s music: Puff, the Magic Dragon by Peter, Paul & Mary

Types of recursion. Structural vs. general recursion. Pure structural recursion. Readings: none. In this module: learn to use accumulative recursion

Typed Racket: Racket with Static Types

OCaml Style Guide Fall 2017

CS 135 Winter 2018 Tutorial 8: Mutual recursion, nested lists, and local. CS 135 Winter 2018 Tutorial 8: Mutual recursion, nested lists, and local 1

CS Homework 2 p. 1. CS Homework 2

Introduction to Typed Racket. The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples

Welcome to CS 115 (Winter 2018)

Objectives. Chapter 4: Control Structures I (Selection) Objectives (cont d.) Control Structures. Control Structures (cont d.) Relational Operators

CS 314 Principles of Programming Languages. Lecture 16

Homework 8: Matrices Due: 11:59 PM, Oct 30, 2018

CS 115, CS 116, CS 135, & CS 136 Style Guide

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

Homework 6: Higher-Order Procedures Due: 10:00 PM, Oct 17, 2017

Chapter 4: Control Structures I (Selection) Objectives. Objectives (cont d.) Control Structures. Control Structures (cont d.

SCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015

Generative and accumulative recursion. What is generative recursion? Example revisited: GCD. Readings: Sections 25, 26, 27, 30, 31

Problem 1: Binary Trees: Flatten

Assertions, pre/postconditions

CS 320: Concepts of Programming Languages

CMSC 330: Organization of Programming Languages. OCaml Expressions and Functions

Assignment: 2. CS 135 Winter 2018 Graham, Nijjar

CIS4/681 { Articial Intelligence 2 > (insert-sort '( )) ( ) 2 More Complicated Recursion So far everything we have dened requires

Spring CS Homework 3 p. 1. CS Homework 3

CIS 130 Exam #2 Review Suggestions

LOOPS. Repetition using the while statement

Welcome to CS 135 (Winter 2018)

6.001 Notes: Section 6.1

More About Recursive Data Types

Announcements. The current topic: Scheme. Review: BST functions. Review: Representing trees in Scheme. Reminder: Lab 2 is due on Monday at 10:30 am.

Lab 1: Setup 12:00 PM, Sep 10, 2017

Intro. Scheme Basics. scm> 5 5. scm>

Case Study: Undefined Variables

Review Questions II KEY

CSE341 Spring 2016, Final Examination June 6, 2016

The Data Design Recipe

COMP 208 Computers in Engineering

Input, output, and sequence

Transcription:

Module 4: Compound data: structures Readings: Sections 6 and 7 of HtDP. Sections 6.2, 6.6, 6.7, 7.4, and 10.3 are optional reading; they use the obsolete draw.ss teachpack. The teachpacks image.ss and world.ss are more useful. Note that none of these particular teachpacks will be used on assignments or exams. CS 115 Winter 2018 4: Compound data: structures 1

Compound data Data may naturally be joined, but a function can produce only a single item. A structure is a way of bundling several pieces of data together to form a single package. We can create functions that consume and/or produce structures, and define our own structures, automatically getting ( for free ) functions that create structures and functions that extract data from structures. CS 115 Winter 2018 4: Compound data: structures 2

Posn structures A Posn (short for Position) is a built-in structure that has two fields containing numbers intended to represent x and y coordinates. We might want to use a Posn to represent: coordinates of a point on a 2-D plane positions on a screen or in a window a geographical position The constructor function make-posn, has contract ;; make-posn: Num Num Posn CS 115 Winter 2018 4: Compound data: structures 3

Each selector function consumes a Posn and produces a number. ;; posn-x: Posn Num ;; posn-y: Posn Num The function posn? is a type predicate. ;; posn?: Any Bool CS 115 Winter 2018 4: Compound data: structures 4

Examples (define myposn (make-posn 8 1)) (posn-x myposn) 8 (posn-y myposn) 1 (posn? myposn) true CS 115 Winter 2018 4: Compound data: structures 5

Substitution rules For any values a and b (posn-x (make-posn a b)) a (posn-y (make-posn a b)) b The make-posn you type is a function application. The make-posn DrRacket displays is a marker to show that the value is a posn. (make-posn (+ 4 4) ( 2 1)) simplifies to (make-posn 8 1) (make-posn 8 1) cannot be simplified. CS 115 Winter 2018 4: Compound data: structures 6

Example: point-to-point distance (x 1,y 1 ) (x 2,y 2 ) distance = (x 2 x 1 ) 2 + (y 2 y 1 ) 2 CS 115 Winter 2018 4: Compound data: structures 7

The function distance ;; (distance posn1 posn2) produces the Euclidean distance ;; between posn1 and posn2. ;; distance: Posn Posn Num ;; example: (check-expect (distance (make-posn 1 1) (make-posn 4 5)) 5) (define (distance posn1 posn2) (sqrt (+ (sqr ( (posn-x posn1) (posn-x posn2))) (sqr ( (posn-y posn1) (posn-y posn2)))))) CS 115 Winter 2018 4: Compound data: structures 8

Functions that produce posns ;; (scale point factor) produces the Posn that results when the fields ;; of point are multiplied by factor ;; scale: Posn Num Posn ;; Examples: (check-expect (scale (make-posn 3 4) 0.5) (make-posn 1.5 2)) (check-expect (scale (make-posn 1 2) 1) (make-posn 1 2)) (define (scale point factor) (make-posn ( factor (posn-x point)) ( factor (posn-y point)))) CS 115 Winter 2018 4: Compound data: structures 9

When we have a function that consumes a number and produces a number, we do not change the number we consume. Instead, we make a new number. The function scale consumes a Posn and produces a new Posn. It doesn t change the old one. Instead, it uses make-posn to make a new Posn. CS 115 Winter 2018 4: Compound data: structures 10

Misusing Posn What is the result of evaluating the following expression? (define point1 (make-posn "Math135" "CS115")) (define point2 (make-posn Red true)) (distance point1 point2) This causes a run-time error, but possibly not where you think. CS 115 Winter 2018 4: Compound data: structures 11

Racket does not enforce contracts, which are just comments, and ignored by the machine. Each value created during the running of the program has a type (Int, Bool, etc.). Types are associated with values, not with constants or parameters. (define p 5) (define q (mystery-fn 5)) CS 115 Winter 2018 4: Compound data: structures 12

Racket uses dynamic typing Dynamic typing: the type of a value bound to an identifier is determined by the program as it is run, e.g. (define x (check-divide n)) Static typing: constants and what functions consume and produce have pre-determined types, e.g. real distance(posn posn1, posn2) While Racket does not enforce contracts, we will always assume that contracts for our functions are followed. Never call a function with data that violates the contract and requirements. CS 115 Winter 2018 4: Compound data: structures 13

Pros and cons of dynamic typing Pros: No need to write down pre-determined types. Flexible: the same definitions can be used for various types (e.g. lists in Module 5, functions in Module 10). Cons: Contracts are not enforced by the computer. Type errors are caught only at run time. CS 115 Winter 2018 4: Compound data: structures 14

Dealing with dynamic typing Dynamic typing is a potential source of both flexibility and confusion. To avoid making mistakes such as the one with make-posn, we can use data definitions: ;; A Posn is a (make-posn Num Num) Using Posn in a contract now means fields contain numbers. CS 115 Winter 2018 4: Compound data: structures 15

Data definitions Data definition: a comment specifying a data type; for structures, include name of structure, number and types of fields. Data definitions like this are also comments, and are not enforced by the computer. However, we will assume data definitions are always followed, unless explicitly told otherwise. Any type defined by a data definition can be used in a contract. CS 115 Winter 2018 4: Compound data: structures 16

Structure definitions Structure definition: code defining a structure, and resulting in constructor, selector, and type predicate functions. (define-struct sname (field1 field2 field3)) Writing this once creates functions that can be used many times: Constructor: make-sname Selectors: sname-field1, sname-field2, sname-field3 Predicate: sname? CS 115 Winter 2018 4: Compound data: structures 17

For a new structure we define, we get the functions for free by creating a structure definition. For posn these functions are already built in, so a structure definition isn t needed. Create a data definition for each structure definition. Put them first, before defined constants and defined functions. CS 115 Winter 2018 4: Compound data: structures 18

Design recipe modifications Data analysis and design: design a data representation that is appropriate for the information handled in our function. Later: more choices for data representations. Now: determine which structures are needed and define them. Include a structure definition (code) and a data definition (comment). and submit with your assignment. CS 115 Winter 2018 4: Compound data: structures 19

Structure for MP3 files Suppose we want to represent information associated with downloaded MP3 files, that is: the name of the performer the title of the song the length of the song the genre of the music (rap, country, etc.) CS 115 Winter 2018 4: Compound data: structures 20

(define-struct mp3info (performer title length genre)) ;; An Mp3Info is a (make-mp3info Str Str Nat Sym) ;; requires: ;; performer is the name of performer of the song, ;; title is the name of song, ;; length is the length of the song in seconds, ;; genre is the genre (type or category) of the song. Note: If all the field names for a new structure are self-explanatory, we will often omit the field-by-field descriptions. CS 115 Winter 2018 4: Compound data: structures 21

The structure definition gives us: Constructor make-mp3info Selectors mp3info-performer, mp3info-title, mp3info-length, and mp3info-genre Predicate mp3info? (define song (make-mp3info "LaLaLa Singer" "Bite This" 80 Punk)) (mp3info-length song) 80 (mp3info? 6) false CS 115 Winter 2018 4: Compound data: structures 22

Templates and data-directed design One of the main ideas of the HtDP text is that the form of a program often mirrors the form of the data. A template is a general framework which we will complete with specifics. It is the starting point for our implementation. We create a template once for each new form of data, and then apply it many times in writing functions that consume that data. A template is derived from a data definition. CS 115 Winter 2018 4: Compound data: structures 23

A template for Mp3Info The template for a function that consumes a structure selects every field in the structure, though a specific function may not use all the selectors. ;; mp3info-template: Mp3Info Any (define (mp3info-template info) (... (mp3info-performer info)... (mp3info-title info)... (mp3info-length info)... (mp3info-genre info)... )) CS 115 Winter 2018 4: Compound data: structures 24

An example ;; (correct-performer oldinfo newname) produces a new Mp3Info ;; formed from oldinfo, correcting performer to newname. ;; correct-performer: Mp3Info Str Mp3Info ;; example: (check-expect (correct-performer (make-mp3info "LaLaLa Singer" "Bite This" 80 Punk) "Anonymous Doner Kebab") (make-mp3info "Anonymous Doner Kebab" "Bite This" 80 Punk)) CS 115 Winter 2018 4: Compound data: structures 25

Using templates to create functions Choose a template and examples that fit the type(s) of data the function consumes. For each example, figure out the values for each part of the template. Figure out how to use the values to obtain the value produced by the function. Different examples may lead to different cases. Different cases may use different parts of the template. If a part of a template isn t used, it can be omitted. New parameters can be added as needed. CS 115 Winter 2018 4: Compound data: structures 26

The function correct-performer We use the parts of the template that we need, and add a new parameter. (define (correct-performer oldinfo newname) (make-mp3info newname (mp3info-title oldinfo) (mp3info-length oldinfo) (mp3info-genre oldinfo))) We could have done this without a template, but the use of a template pays off when designing more complicated functions. CS 115 Winter 2018 4: Compound data: structures 27

Additions to syntax for structures The special form (define-struct sname (field1... fieldn)) defines the structure type sname and automatically defines the following built-in functions: Constructor: make-sname Selectors: sname-field1... sname-fieldn Predicate: sname? A value is a number, a symbol, a string, a boolean, or is of the form (make-sname v1... vn) for values v1 through vn. CS 115 Winter 2018 4: Compound data: structures 28

Additions to semantics for structures The substitution rule for the ith selector is: (sname-fieldi (make-sname v1... vi... vn)) vi The substitution rules for the type predicate are: (sname? (make-sname v1... vn)) true (sname? V) false for a value V of any other type. CS 115 Winter 2018 4: Compound data: structures 29

An example using posns Recall the definition of the function scale : (define (scale point factor) (make-posn ( factor (posn-x point)) ( factor (posn-y point)))) CS 115 Winter 2018 4: Compound data: structures 30

Then we can make the following substitutions: (define myposn (make-posn 4 2)) (scale myposn 0.5) (scale (make-posn 4 2) 0.5) (make-posn ( 0.5 (posn-x (make-posn 4 2))) ( 0.5 (posn-y (make-posn 4 2)))) (make-posn ( 0.5 4) ( 0.5 (posn-y (make-posn 4 2)))) CS 115 Winter 2018 4: Compound data: structures 31

(make-posn 2 ( 0.5 (posn-y (make-posn 4 2)))) (make-posn 2 ( 0.5 2)) (make-posn 2 1) Since (make-posn 2 1) is a value, no further substitutions are needed. CS 115 Winter 2018 4: Compound data: structures 32

Another example (define mymp3 (make-mp3info "Avril Lavigne" "One " 276 Rock)) (correct-performer mymp3 "U2") (correct-performer (make-mp3info "Avril Lavigne" "One " 276 Rock) "U2") (make-mp3info "U2" (mp3info-title (make-mp3info "Avril Lavigne" "One " 276 Rock)) (mp3info-length (make-mp3info "Avril Lavigne" "One " 276 Rock)) (mp3info-genre (make-mp3info "Avril Lavigne" "One " 276 Rock))) CS 115 Winter 2018 4: Compound data: structures 33

(make-mp3info "U2" "One" (mp3info-length (make-mp3info "Avril Lavigne" "One " 276 Rock)) (mp3info-genre (make-mp3info "Avril Lavigne" "One " 276 Rock))) (make-mp3info "U2" "One" 276 (mp3info-genre (make-mp3info "Avril Lavigne" "One " 276 Rock))) (make-mp3info "U2" "One " 276 Rock) CS 115 Winter 2018 4: Compound data: structures 34

Using the design recipe for compound data Step 1: Data analysis and design. Define any new structures needed for the problem. Write structure and data definitions for each new type, and include right after the file header. CS 115 Winter 2018 4: Compound data: structures 35

Using the design recipe for compound data Step 2: Template. Create one template for each new type defined, and use for each function that consumes that type. Use a generic name for the template function and include a generic contract. CS 115 Winter 2018 4: Compound data: structures 36

Step 3: Purpose (unchanged). Step 4: Contract and requirements. Atomic data types and compound types are allowed. Must use type names from the new data definitions. Steps 5: Examples (unchanged). Step 6: Function definition (header and body). Use the template that matches the data consumed. Use the examples to help you fill in the blanks. Step 7: Tests (unchanged). CS 115 Winter 2018 4: Compound data: structures 37

Design recipe example Suppose we wish to create a function card-colour that consumes a playing card and produces the symbol red or black indicating the colour of the suit of that card. For simplicity, we ignore face cards. Data analysis and design. (define-struct card (value suit)) ;; A Card is a (make-card Nat Sym) ;; requires ;; value is between 1 to 10, inclusive, and ;; suit is one of the values hearts, diamonds, spades, and clubs. CS 115 Winter 2018 4: Compound data: structures 38

The structure definition gives us: Constructor make-card Selectors card-value and card-suit Predicate card? The data definition tells us: types required by make-card types produced by card-value and card-suit CS 115 Winter 2018 4: Compound data: structures 39

Templates for Cards We can form a template for use in any function that consumes a single Card: ;; card-template: Card Any (define (card-template acard) (... (card-value acard)... (card-suit acard)... )) CS 115 Winter 2018 4: Compound data: structures 40

You might find it convenient to use constant definitions to create some data for use in examples and tests. (define tenofhearts (make-card 10 hearts)) (define oneofdiamonds (make-card 1 diamonds)) (define threeofspades (make-card 3 spades)) (define fourofclubs (make-card 4 clubs)) CS 115 Winter 2018 4: Compound data: structures 41

Mixed data and structures Consider writing functions that use a multimedia file (MP3 or movie). (define-struct movieinfo (director title duration genre)) ;; A MovieInfo is a (make-movieinfo Str Str Nat Sym) ;; requires: ;; duration is a the length of the movie in minutes ;; ;; A MmInfo is one of: ;; * an Mp3Info or ;; * a MovieInfo. Note that the MmInfo does not require a structure definition. CS 115 Winter 2018 4: Compound data: structures 42

The template for Mminfo The template for mixed data is a cond with one question for each type of data. ;; mminfo-template: Mminfo Any (define (mminfo-template info) (cond [(mp3info? info)... ] [(movieinfo? info)... ])) We use type predicates in our questions. Next, expand the template to include more information about the structures. CS 115 Winter 2018 4: Compound data: structures 43

;; mminfo-template: Mminfo Any (define (mminfo-template info) (cond [(mp3info? info) (... (mp3info-performer info)... (mp3info-title info)... (mp3info-length info)... (mp3info-genre info)... )] [(movieinfo? info) (... (movieinfo-director info)... (movieinfo-title info)... (movieinfo-duration info)... (movieinfo-genre info)... ) ])) CS 115 Winter 2018 4: Compound data: structures 44

An example: mminfo-artist ;; (mminfo-artist info) produces performer/director name from info ;; mminfo-artist: MmInfo Str ;; Examples: (check-expect (mminfo-artist (make-mp3info "Beck" "Tropicalia" 185 Alternative)) "Beck") (check-expect (mminfo-artist (make-movieinfo "Orson Welles" "Citizen Kane" 119 Drama)) "Orson Welles") (define (mminfo-artist info)... ) CS 115 Winter 2018 4: Compound data: structures 45

The definition of mminfo-artist (define (mminfo-artist info) (cond [(mp3info? info) (mp3info-performer info)] [(movieinfo? info) (movieinfo-director info)])) CS 115 Winter 2018 4: Compound data: structures 46

Reasons for the design recipe and the template design to make sure that you understand the type of data being consumed and produced by the function to take advantage of common patterns in code CS 115 Winter 2018 4: Compound data: structures 47

Reminder: anyof types If a consumed or produced value for a function can be one of a restricted set of types, we will use the notation (anyof type1 type2... typek) For example, if we hadn t defined MmInfo as a new type, we could have written the contract for mminfo-artist as ;; mminfo-artist: (anyof Mp3Info MovieInfo) Str CS 115 Winter 2018 4: Compound data: structures 48

A nested structure (define-struct doublefeature (first second start-hour)) ;; A DoubleFeature is a ;; (make-doublefeature MovieInfo MovieInfo Nat), ;; requires: ;; start-hour is between 0 and 23, inclusive, for the ;; starting hour of first movie CS 115 Winter 2018 4: Compound data: structures 49

An example of a DoubleFeature is (define classic-movies (make-doublefeature (make-movieinfo "Orson Welles" "Citizen Kane" 119 Drama) (make-movieinfo "Akira Kurosawa" "Rashomon" 88 Mystery) 20)) Develop the function template. What is the title of the first movie? Do the two movies have the same genre? What is the total duration for both movies? CS 115 Winter 2018 4: Compound data: structures 50

Goals of this module You should be comfortable with these terms: structure, field, constructor, selector, type predicate, dynamic typing, static typing, data definition, structure definition, template. You should be able to write functions that consume and produce structures, including Posns. You should be able to create structure and data definitions for a new structure, determining an appropriate type for each field. CS 115 Winter 2018 4: Compound data: structures 51

You should know what functions are defined by a structure definition, and how to use them. You should be able to write the template associated with a structure definition, and to expand it into the body of a particular function that consumes that type of structure. You should understand the use of type predicates and be able to write code that handles mixed data. CS 115 Winter 2018 4: Compound data: structures 52