8.1

II Foundations

    3 Getting Started

      3.1 Motivating Example: Flags

      3.2 Numbers

      3.3 Expressions

      3.4 Terminology

      3.5 Strings

      3.6 Images

        3.6.1 Combining Images

        3.6.2 Making a Flag

      3.7 Stepping Back: Types, Errors, and Documentation

        3.7.1 Types and Contracts

        3.7.2 Format and Notation Errors

        3.7.3 Finding Other Functions: Documentation

    4 Naming Values

      4.1 The Definitions Window

      4.2 Naming Values

        4.2.1 Names Versus Strings

        4.2.2 Expressions versus Statements

      4.3 The Program Directory

        4.3.1 Understanding the Run Button

      4.4 Using Names to Streamline Building Images

    5 From Repeated Expressions to Functions

      5.1 Example: Similar Flags

      5.2 Defining Functions

        5.2.1 How Functions Evaluate

        5.2.2 Type Annotations

        5.2.3 Documentation

      5.3 Functions Practice: Moon Weight

      5.4 Documenting Functions with Examples

      5.5 Functions Practice: Cost of pens

      5.6 Recap: Defining Functions

    6 Conditionals and Booleans

      6.1 Motivating Example: Shipping Costs

      6.2 Conditionals: Computations with Decisions

      6.3 Booleans

        6.3.1 Other Boolean Operations

        6.3.2 Combining Booleans

      6.4 Asking Multiple Questions

      6.5 Evaluating by Reducing Expressions

      6.6 Composing Functions

        6.6.1 How Function Compositions Evaluate

        6.6.2 Function Composition and the Directory

      6.7 Nested Conditionals

      6.8 Recap: Booleans and Conditionals

    7 Introduction to Tabular Data

      7.1 Creating Tabular Data

      7.2 Extracting Rows and Cell Values

      7.3 Functions over Rows

      7.4 Processing Rows

        7.4.1 Finding Rows

        7.4.2 Ordering Rows

        7.4.3 Adding New Columns

        7.4.4 Calculating New Column Values

      7.5 Examples for Table-Producing Functions

    8 Processing Tables

      8.1 Cleaning Data Tables

        8.1.1 Loading Data Tables

        8.1.2 Dealing with Missing Entries

        8.1.3 Normalizing Data

        8.1.4 Normalization, Systematically

          8.1.4.1 Using Programs to Detect Data Errors

      8.2 Task Plans

      8.3 Preparing Data Tables

        8.3.1 Creating bins

        8.3.2 Splitting Columns

      8.4 Managing and Naming Data Tables

      8.5 Visualizations and Plots

      8.6 Summary: Managing a Data Analysis

    9 From Tables to Lists

      9.1 Basic Statistical Questions

      9.2 Extracting a Column from a Table

      9.3 Understanding Lists

        9.3.1 Lists as Anonymous Data

        9.3.2 Creating Literal Lists

      9.4 Operating on Lists

        9.4.1 Built-In Operations on Lists of Numbers

        9.4.2 Built-In Operations on Lists in General

        9.4.3 An Aside on Naming Conventions

        9.4.4 Getting Elements By Position

        9.4.5 Transforming Lists

        9.4.6 Recap: Summary of List Operations

      9.5 Lambda: Anonymous Functions

      9.6 Combining Lists and Tables

    10 Processing Lists

      10.1 Making Lists and Taking Them Apart

      10.2 Some Example Exercises

      10.3 Structural Problems with Scalar Answers

        10.3.1 my-len: Examples

        10.3.2 my-sum: Examples

        10.3.3 From Examples to Code

      10.4 Structural Problems that Transform Lists

        10.4.1 my-doubles: Examples and Code

        10.4.2 my-str-len: Examples and Code

      10.5 Structural Problems that Select from Lists

        10.5.1 my-pos-nums: Examples and Code

        10.5.2 my-alternating: Examples and Code

      10.6 Structural Problems with Sub-Domains

        10.6.1 my-max: Examples

        10.6.2 my-max: From Examples to Code

      10.7 More Structural Problems with Scalar Answers

        10.7.1 my-avg: Examples

      10.8 Structural Problems with Accumulators

        10.8.1 my-running-sum: First Attempt

        10.8.2 my-running-sum: Examples and Code

        10.8.3 my-alternating: Examples and Code

      10.9 Dealing with Multiple Answers

        10.9.1 uniq: Problem Setup

        10.9.2 uniq: Examples

        10.9.3 uniq: Code

        10.9.4 uniq: Reducing Computation

        10.9.5 uniq: Example and Code Variations

        10.9.6 uniq: Why Produce a List?

      10.10 Monomorphic Lists and Polymorphic Types

    11 Introduction to Structured Data

      11.1 Understanding the Kinds of Compound Data

        11.1.1 A First Peek at Structured Data

        11.1.2 A First Peek at Conditional Data

      11.2 Defining and Creating Structured and Conditional Data

        11.2.1 Defining and Creating Structured Data

        11.2.2 Annotations for Structured Data

        11.2.3 Defining and Creating Conditional Data

      11.3 Programming with Structured and Conditional Data

        11.3.1 Extracting Fields from Structured Data

        11.3.2 Telling Apart Variants of Conditional Data

        11.3.3 Processing Fields of Variants

    12 Collections of Structured Data

      12.1 Lists as Collective Data

      12.2 Sets as Collective Data

        12.2.1 Picking Elements from Sets

        12.2.2 Computing with Sets

      12.3 Combining Structured and Collective Data

      12.4 Data Design Problem: Representing Quizzes

    13 Recursive Data

      13.1 Functions to Process Recursive Data

      13.2 A Template for Processing Recursive Data

    14 Trees

      14.1 Data Design Problem – Ancestry Data

        14.1.1 Computing Genetic Parents from an Ancestry Table

        14.1.2 Computing Grandparents from an Ancestry Table

        14.1.3 Creating a Datatype for Ancestor Trees

      14.2 Programs to Process Ancestor Trees

      14.3 Summarizing How to Approach Tree Problems

      14.4 Study Questions

    15 Interactive Games as Reactive Systems

      15.1 About Reactive Animations

      15.2 Preliminaries

      15.3 Version: Airplane Moving Across the Screen

        15.3.1 Updating the World State

        15.3.2 Displaying the World State

        15.3.3 Observing Time (and Combining the Pieces)

      15.4 Version: Wrapping Around

      15.5 Version: Descending

        15.5.1 Moving the Airplane

        15.5.2 Drawing the Scene

        15.5.3 Finishing Touches

      15.6 Version: Responding to Keystrokes

      15.7 Version: Landing

      15.8 Version: A Fixed Balloon

      15.9 Version: Keep Your Eye on the Tank

      15.10 Version: The Balloon Moves, Too

      15.11 Version: One, Two, ..., Ninety-Nine Luftballons!

    16 Examples, Testing, and Program Checking

      16.1 From Examples to Tests

      16.2 More Refined Comparisons

      16.3 When Tests Fail

      16.4 Oracles for Testing