Skip to main content

CSC 151.01, Class 10: Tables and compound data

Overview

  • Preliminaries
    • Notes and news
    • Upcoming work
    • Extra credit
    • Questions
  • Formatting your code
  • About quiz 3
  • The reading(s)
  • Lab
  • Debrief

Preliminaries

News / Etc.

  • New partners!
  • My life continues to be a Robert Burns poem. I spent 9am to 10pm on Saturday at family events. I dealt with a stupid software bug for eight hours on Sunday. I do intend to catch up on stuff, but ….
    • Please do not emulate me. (Well, family events are good.)
  • If I haven’t had you start lab by 9:00 a.m., throw something at me.
    • Preferably something soft.

Upcoming work

Extra credit (Academic/Artistic)

  • Visit the two exhibits at the Faulconer Gallery.
  • CS Table Tuesday: Accessibility
  • Tuesday, Feb. 13 at 7pm in JRC 209: Creating Solutions with Design Thinking Tools. Join CEO and Founder of Human Centered Innovation, Megan Goering ’08, to learn specific strategies of human centered design that will help take your problem solving ideas to the next level.
  • Wednesday, Feb. 14 at 4:15 p.m. in Noyce 2021: Cool CS Alumni talk about inclusion, life, and career after Grinnell.

Extra credit (Peer)

  • Listen to KDIC Wednesdays at 6pm - Witty banter with co-host and Indian, Arabic, and Farsi music. (Up to two units of extra credit.)
  • Wednesday (February 14th), the Langan CAs will be co-hosting an event with SHIC about sex positivity and SHIC resources. The event will most likely take place 8:30-9:30pm in Langan first lounge.
  • Peer editing with SS. Talk to SS about the details. Make your English Lit more literate.

Extra credit (Misc)

Other good things

  • Participate in Islamic awareness week.

Questions

What’s a carriage return?
A relic of the typewriter age.
When I say “Use carriage returns” I mean “break the code into lines at reasonable/appropriate places”
I hear something about a “good faith grade guarantee”. Can you explain that?
Sure. If you miss no more than two classes (with a few exceptions) and attempt all the work, you are guaranteed to pass with at least a C+.
Can you talk a bit about formatting of code?
Sure. I’ll add a section below.
I don’t understand the documentation of city-city<? from the reading. Why does it produce a Boolean value rather than a sorted list?
That’s an interesting question.
We’re starting by comparing individual cities.
The sort routine repeatedly applies that procedure to figure out the correct order.
> (define montgomery '("Alabama" "Montgomery" 32.361538 -86.279118))
> (define juneau '("Alaska" "Juneau" 58.301935 -134.41974))
> (city-city<? montgomery juneau)
#f
> (city-city<? juneau montgomery)
#t
Why don’t our graders give more feedback?
Because (a) they may not be able to give detailed feedback; (b) they don’t have the time; and (c) it’s not clear that it’s worth it.

Formatting your code

You have multiple goals in writing code.

  • The code should achieve its purpose.
  • The code should be clear to the human reader.

Here’s a sample procedure.

(define something (lambda
(x) (map (o
increment 
increment) (iota
x))))
(define something (lambda (x) (map (o increment increment) (iota x))))`

Code that is easier to read is often easier to fix.

Ctrl-i reindents. Yay.

Lots of formatting is custom.

  • (define name goes on a line by itself.
  • (lambda (params) goes on a line by itself.
  • Arguments to a procedure call either go (a) all on the same line or (b) one per line
  • Don’t have parentheses on lines by themselves (“floating parentheses”)
  • Choose good names.

The code above becomes

(define ints-from-2
  (lambda (x)
    (map (o increment 
            increment)
         (iota x))))

About the quiz

Document double

;;; Procedure:
;;;   double
;;; Parameters:
;;;   num, a number
;;;     Note: We can double complex numbers.
;;;     Note: Name, Type
;;; Purpose:
;;;   Compute twice num
;;; Produces:
;;;   doubled, a number
;;;     Note: Name, type
;;; Preconditions:
;;;   [No additional]
;;; Postconditions:
;;;   * doubled = (* 2 num)
;;;       Note: We specify the *value* of the result.
;;;   * doubled has the same "type" as num.  If num is exact, doubled
;;;     is exact.  If num is complex, doubled is complex.  If num is
;;;     an integer, doubled is an integer.  And so on and so forth.
;;;       Note: This second postcondition is not strictly necessary,
;;;         since the first postcondition implies it.

Doubling a list

Expected

(define double-list
  (lambda (lst)
    (map double lst)))

Hoped for

(define double-list
  (section map double <>))

The readings

There was not time for this section because Sam wanted to make sure that students had time for lab. Plus, he’d been it by flying fruit.

What did you see as the big lessons from the reading?

Why represent compound data with a list rather than a string?

Lab

Issues to be covered next class.

sort and tally, like map and reduce, do something to a list by repeatedly using another procedure.

  • map applies the procedure to individual elements and gives a new list.
  • reduce repeatedly applies the procedure to neighboring pairs of elements and gives a single value
  • sort rearranges the list by applying the procedure to pairs of value and swapping the position of pairs that are out of order.
  • tally counts elements in the list by applying a procedure that determines whether or not a value counts.

We will find that it becomes useful to focus on the procedures that map, reduce, and sort use. (“First solve it for an element or a pair.
Then generalize to a list with map, reduce, or sort.” Or “Solve for one, then for many.”)

  • In the case of sorting, we tend to focus on comparing two values.

Debrief

To be covered next class.

Make it a habit to write the four P’s for every procedure you write.

Focus on “solve for one, then for many”