Teaching 2500 F '12 Assignments The Hand In Set 1 Set 2 Set 3 Set 3h Set 4 Set 4h Set 5 Set 5h Set 6 Set 6h Set 7 Set 7h Set 8 Set 9 Set 8h Set 10 Set 9h Set 11 Set 12 Set 10h

### Problem Set 5h

Due date: 10/10 @ 11:59pm

Honors-section homework

You have to work on this problem set with the same partner you had for hw4h.

You must follow the design recipe and the guidelines when you develop functions.

# Lists and More Lists!

Problem A1

The local meteorological society keeps a list of records about the weather each day. They track the following attributes: zip code, humidity (as a percentage), and high and low temperatures (in Fahrenheit) for the day.

Here is the data definition for a weather record:

```  (define-struct weather (zip humidity high low))
;; A Weather is a (make-weather String Number Number Number)
;; Intepretation:
;;  The weather's zip is the 5-digit zip code where the data was collected.
;;  The weather's humidity is a percentage.
;;  The weather's high and low represent the day's high and low temperatures in Fahrenheit.
```

1. Design a data definition for a list of weather records (`LoWR`). Note that a list of weather records may contain multiple records for the same zip code.
2. Design a function `muggy` to eliminate weather records with a humidity lower than `humid-threshold` or a high temperature lower than `temp-threshold`. The function consumes a list of weather records, called `lowr`, a number `humid-threshold` (expressed as a percentage), and a number `temp-threshold` (that denotes a temperature in degrees Fahrenheit), and produces a list of only those weather records in `lowr` whose humidity and high temperature are greater than or equal to `humid-threshold` and `temp-threshold`, respectively.
3. The meteorological company has just been informed of a problem with temperature readings at all locations in zip code 02138. The high and low temperatures on file for this zip code are 4 degrees higher than the actual high and low temperatures of the day. Design a function `adjust-temps` that takes a list of weather records called `lowr`, a string called `zip` representing the zip code, and a number called `adjustment`, and produces a list of weather records that contains all the records in `lowr` but with the `high` and `low` temperatures in any record with zip code `zip` replaced by `high + adjustment` and `low + adjustment`.

Using your function, the meteorological society can fix its list of weather records for October 3rd, called `lowr-oct-3-2012`, by running `(adjust-temps lowr-oct-3-2012 "02138" -4)`.

Problem A2

The half-open interval [5,10) contains the following integers: 5,6,7,8,9. More generally, if `start` and `end` are integers and `start` is less than `end`, then [`start,end`) denotes the half-open interval that includes all the integers from (and including) `start` to (and excluding) `end`.

Develop the function `evens-in-interval` which takes two integers `start` and `end`. The computation it performs depends on the inputs:

1. If `start >= end`, the function's output is `'invalid-interval` (indicating that [`start,end`) is not a valid half-open interval).
2. If `start < end` but there are no even integers in half-open interval [`start,end`), the function's output is `'none` (indicating that there are no even integers in this half-open interval).
3. If `start < end` and there is at least one even integer in the half-open interval [`start,end`), the function's output is the list of even integers in ascending order. For example, `(evens-in-interval 5 10)` produces the output ``` (cons 6 (cons 8 empty))```.

Hint: Do some wishful thinking: try to figure out what helper functions you should design for this problem.

# Graphical Editor, Revisited

Re-develop your graphical editor from the last assignment using a slightly different data representation.

A 1String is a string, s, whose length is exactly one, i.e. ```(= (string-length s) 1)```. Note: 1String is not a valid BSL identifier, but it works fine as a name for your data representation.

A list of 1Strings (Lo1String) is one of:

• `empty`
• `(cons 1String Lo1String)`

Revise the Editor data defintion from the first part of the last assignment to only use 1Strings and Lo1Strings:

```  (define-struct editor (pre post))
;; An Editor is a (make-editor Lo1String Lo1String)
```

Re-develop the editor program using this new definition (Exercise 1-5).

Exercise 6: Discuss the design trade-off in a paragraph of 20 to 30 words. (We will deduct points for each word in excess of 30.)

# Pocket Calculator

In this part of the assignment you will develop the basic pieces of a small pocket calculator for arithmetic expressions.

An arithmetic expression can either be a number, a variable, a unary operation applied to one argument, or a binary operation applied to two arguments. So for example, 3 + 4 is an arithmetic expression -- the binary operation + is applied to the arithmetic expressions 3 and 4. Arithmetic expressions nest of course, and we use parenthesis to indicate the nesting, so for example, (1 / 2) * (x + (3 + 4)) is an arithmetic expression. The basic operations are (unary) -, which flips the sign of its argument, and (binary) -, +, *, /, which perform subtraction, addition, multiplication, and division, respectively.

Exercise 7: Develop a data definition for arithmetic expressions without variables.

Exercise 8: An expression that contains no variables can be evaluated. For example, 3 + 4 evaluates to 7. Develop a program `eval-arith` that evaluates a given arithmetic expression (without variables).

Exercise 9: Develop a data definition for arithmetic expressions that may contain variables. Hint: what can you reuse?

Exercise 10: Develop a program `plug-in` that consumes an arithmetic expression (that may contain variables), a variable, and a number, and produces a similar arithmetic expression where all occurrences of the given variable are replaced with the given number. So for example, plugging 5 in for x in (the representation of) 2 * (x * x) should produce the expression (that represents) 2 * (5 * 5).

 last updated on Sun Dec 2 14:52:34 EST 2012 generated with Racket