Due Date: Thursday May 21, 10pm Eastern.
Purpose: to design list processing functions
You must submit a single .rkt file containing your responses to all exercises via the Handin Server. We accept no email submissions.
You must use the programming language specified at the top of this page.
Your code must conform to the guidelines outlined in the style guide on the course website. The style guide will be updated as the semester progresses, so revisit it before submitting each assignment.
Unless otherwise stated, for all programming problems you must provide (i) a signature, (ii) a purpose statement, (iii) sufficiently many check-expects (not for big-bang programs), and (iv) the actual code, in the language specified at the top of this page.
Be sure to look at the feedback for previous assignments before submitting, as we will be grading you more strictly on things we have pointed out before.
Failure to comply with these expectations will result in deductions and possibly a 0 score.
Exercise 1 Consider the following data defintion:
; A Size is one of: ; - "small" ; - "medium" ; - "large" (define-struct drip-coffee [cream size]) (define-struct latte [size]) (define-struct cortado [size]) ; A Coffee is one of: ; - (make-drip-coffee Boolean Size) ; - (make-latte Size) ; - (make-cortado Size) ; INTERPRETATION: Represents three possible coffee orders. Each order ; has a size; drip coffee might also have cream in it. ; A CoffeeOrder (List-of-Coffee) is one of: ; - '() ; - (cons Coffee CoffeeOrder) ; INTERPRETATION: The list of coffee orders at a local coffee shop ; A MaybeCoffee is one of ; - #false ; - Coffee ; INTERPRETATION: Represents maybe having a Coffee
Design the function last-latte that accepts a CoffeeOrder and returns a Coffee representing the last latte order (i.e., a (make-latte ...)) in the list. If there are no lattes in the CoffeeOrder, it returns #false.
Hint: follow the design recipe carefully here. Be careful with your signatures and templates, and they will help guide your implementation.
Exercise 2 Consider the following data definition:
(define-struct dinner-check [food drink tax tip]) ; A DinnerCheck is a (make-dinner-check Number Number Number Number) ; INTERPRETATION: Represents the bill for a table in a restaurant, ; with numbers representing the cost of the food, drink, tax, and tip. ; An OrderBook (List-of-DinnerCheck) is one of: ; - '() ; - (cons DinnerCheck OrderBook)
Design the function flag-anomalous that accepts an OrderBook and returns an OrderBook consisting only of DinnerChecks that are anomalous. A DinnerCheck is considered anomalous if the tax amount is not exactly 10% of the sum of the food and drink amounts, or if the tip amount is greater than 50% of the sum of the food, drink, and tax amounts (or both).
Exercise 3 This problem concerns the following data definitions that represent the seat assignments on a flight:
(define-struct seat [number is-empty passenger-name]) ; A Seat is a (make-seat String Boolean String) ; INTERPRETATION: A seat assignment on a plane, consisting of a ; seat number ("34B"), whether or not it is empty, and the name of the ; passenger if it is not empty. If a seat assignment is empty, the ; passenger name should be the empty string (""). ; A Flight (List-of-Seat) is one of: ; - '() ; - (cons Seat Flight) ; INTERPRETATION: Represents the seats present in a given flight. ; (The seats are not guaranteed to be ordered by seat number; it's just a ; set of seats.)
Design the function seat-member?, which accepts a seat number (a String) and a Flight, and returns a Boolean representing whether or not that seat number appears in the flight (regardless of whether it is empty or not).