---
title: Eboard 25  Pairs and pair structures
number: 25
section: eboards
held: 2017-10-27
---
CSC 151.03, Class 25:  Pairs and pair structures
================================================

_Overview_

* Preliminaries
    * Notes and news
    * Upcoming work
    * Extra credit
    * Friday PSA
    * Questions
* Representing lists with pairs and cons cells
* Lab
* Debrief (?)

### News / Etc.

* A pair of requests.
     * Should be easy: Be respectful to others
     * Harder: Even when they are not respectful
* A useful reading: <https://www.nytimes.com/2017/10/23/opinion/engaging-fanatics.html>
* Grading is in the queue for the weekend!

### Upcoming Work

* [Writeup for class 24](../writeups/writeup24) due TONIGHT at 10:30 p.m.
    * Exercise 6.  No documentation necessary.
    * To: <csc151-03-grader@grinnell.edu>
    * Subject: CSC 151.03 Writeup 24 (YOUR NAMES)
* [Writeup for class 25](../writeups/writeup25) due Monday at 10:30 p.m.
    * Exercises 1 and 3.
    * Hand to: Sam (or under Sam's door)
* [Assignment 6](../assignments/assignment06) distributed.
    * Although the assignment says that you have assigned pairs, I will
      permit you to choose your own partners (or to work in individuals
      or trios).
* Read [Vectors](../readings/vectors) for Monday's class.
    * Still under development; should be ready tonight.
    * Sam will try to email you.

### Extra credit (Academic/Artistic)

* Protest Bot workshop, Friday 4pm in Burling 1st.  
* Rebirth Brass Band, Wednesday at 7:30 p.m. in Herrick Chapel.

### Extra credit (Peer)

* Women's Soccer vs. Monmouth Saturday at 11am.
* Submit to the Grinnell Review (grinnellreview.com) due next Friday.
* Pioneer Weekend in about two weeks: A one weekend innovation challenge.
  Registration at <https://grinnell.co1.qualtrics.com/jfe/form/SV_0oKEvGlV5twGczr>

### Extra credit (Misc)

### Other good things

* Art SEPC Pop-Up Show.
* Grinnell Singers Sunday at 2 p.m. in Sebring Lewis. 
* Star Wars Music Talk TODAY at 4pm.
* Swimming and Diving meet Saturday.
* Tailgate party Saturday at 11:30 a.m.
* Football Saturday

### Friday PSA

### Friday Survey

How is recursion going?

* [4] It's really hard.  I really don't feel like I'm getting anything.
* [20] It's hard, but I'm starting to get it.  I can find "templates" and
  modify them to do what I want, but I don't think I could write a 
  recursive procedure from scratch.
* [10] It's hard, and I'm getting it pretty well.  I can write a recursive
  procedure from scratch, but I know there are some things that I have to
  learn.
* [1] Why is Sam asking these questions?  Recursion is more obvious than
  conditionals.

Let's try a sample recursive procedure written from scratch.

```
; Remove the first n elements of a list
(define list-drop
  (lambda (n lst)
    ; Base case: What's easy?  Dropping nothing from a list
    (if (zero? n)
        lst
        lst)))
```

Let's try thinking about it conceptually on another problem (no code, just
base case and recursive step).

I have a list of values, lst, and a number, n, and I want to break
lst up into a list of n approximately-equal-length lists.

```
> (break-up '(a b c d e) 2)
'((a b c) (d e))
> (break-up '(a b c d e f g h) 4)
'((a b) (c d) (e f) (g h))
> (break-up '(a b c d e f g h) 2)
'((a b c d) (e f g h))
> (break-up '(a b c d e f g h) 3)
'((a b c) (d e f) (g h))
> (break-up '(a b c d e f g h) 1)
'((a b c d e f g h))
```

* What's a natural base case?  When n is 1, we can just return a list of
  the original list.
* How do `lst` and `n` change when you recurse?  "Just throw something
  out there."  
    * Divide the length of the list by n.  That tells you how big the
      first chunk should be.  (The length of some of the sublists.)  Round
      up.  We'll call that chunk-size.
    * We'll set aside the first chunk-size elements.
    * We'll then recurse after dropping chunk-size elements and n-1.
* Note: Precondition: n>=1
* Sam attempts an example all the way through
    * `(break-up '(a b c d e f g h i) 4)`
    * divide length by 4, that gives us 2.25, we round up to 3.
    * `(cons '(a b c) (break-up '(d e f g h i) 3))`
    * divide length (6) by 3.  That gives us 2.  We round up to 2.
    * `(cons '(a b c) (cons '(d e) (break-up '(f g h i) 2)))`
    * `(cons '(a b c) (cons '(d e) (cons '(f g) (break-up '(h i) 1))))`
    * `(cons '(a b c) (cons '(d e) (cons '(f g) '((h i)))))`
    * `(cons '(a b c) (cons '(d e) '((f g) (h i))))`

### Questions

Quiz!
-----

Representing lists with pairs and cons cells
--------------------------------------------

* See whiteboard.

Lab
---

Writeup #1 and #3.

Debrief
-------

* Are there lists that are not pairs?  Yes.  `null` is a list, but not
  a pair.
* Are there pairs that are not lists?  Yes.  `(cons 'a 'a)` is a pair,
  but not a list.
