Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

32
Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12

Transcript of Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Page 1: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Scheme: Functions

Chapter 3 of HTDP

Ms. Knudtzon

September 12

Page 2: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Check Point

• Lab Exercises from last week

• Fabric Exercises from the weekend

Page 3: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Scheme Programs

• We’ve now written several simple functions in Scheme A program in Scheme usually consists of several

inter-related functions

• In the area-of-ring function from last week, we used a small auxiliary function, area-of-disk that we had written in a previous step

• For very large programs, having auxiliary functions becomes more and more necessary

Page 4: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Class Problem

Imagine the owner of a movie theater who has complete freedom in setting ticket prices. The more he charges, the fewer the people who can afford tickets. In a recent experiment the owner determined a precise relationship between the price of a ticket and average attendance. At a price of $5.00 per ticket, 120 people attend a performance. Decreasing the price by a dime ($.10) increases attendance by 15. Unfortunately, the increased attendance also comes at an increased cost. Every performance costs the owner $180. Each attendee costs another four cents ($0.04). The owner would like to know the exact relationship between profit and ticket price so that he can determine the price at which he can make the highest profit.

• How do we go about solving this problem? Need to figure out what the problem wants, and then write contracts,

purpose and headers for each function.

Page 5: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Dependencies

• Profit is difference between revenue and cost

• Revenue is generated by sale of tickets. (Product of ticket price and # of attendees)

• Cost consists of two part - fixed part $180 and variable part that depends on # of attendees

• Also know that # of attendees depends on ticket price.

Page 6: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Definitions

;; profit : number -> number;; to compute the profit as the difference between revenue and costs;; at some given ticket-price(define (profit ticket-price) ...)

;; revenue : number -> number;; to compute the revenue, given ticket-price (define (revenue ticket-price) ...)

;; cost : number -> number;; to compute the costs, given ticket-price(define (cost ticket-price) ...)

;; attendees : number -> number;; to compute the number of attendees, given ticket-price(define (attendees ticket-price) ...)

Page 7: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Examples

• Exercise 3.1.1. The next step is to make up examples for each of the functions. Determine how many attendees can afford a show at a ticket price of $3.00, $4.00, and $5.00. Use the examples to formulate a general rule that shows how to compute the number of attendees from the ticket price.

• Exercise 3.1.2. Use the results of exercise 3.1.1 to determine how much it costs to run a show at $3.00, $4.00, and $5.00. Also determine how much revenue each show produces at those prices. Finally, figure out how much profit the monopolistic movie owner can make with each show. Which is the best price (of these three) for maximizing the profit?

Page 8: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Two ways

;; How to design a program (define (profit ticket-price) (- (revenue ticket-price) (cost ticket-price)))(define (revenue ticket-price) (* (attendees ticket-price) ticket-

price))(define (cost ticket-price) (+ 180 (* .04 (attendees ticket-price))))(define (attendees ticket-price) (+ 120 (* (/ 15 .10) (- 5.00 ticket-price))))

;; How not to design a program

(define (profit price)

(- (* (+ 120

(* (/ 15 .10)

(- 5.00 price)))

price)

(+ 180

(* .04

(+ 120

(* (/ 15 .10)

(- 5.00 price)))))))

Page 9: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Guidelines

• Formulate auxiliary function definitions for every dependency between quantities mentioned in the problem statement or discovered with example calculations.

• Give names to frequently used constants and use the names instead of the constants in programs. Variable definitions (define pi 3.14) (The “shortcuts” I told you about last week)

Page 10: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Homework

• Exercise 3.31 of HTDP (unit conversion)

Page 11: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Scheme: Conditionals

Chapter 4 of HTDP

Ms. Knudtzon

September 13

Page 12: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Check Point

• 80 point quiz

• Fabric Exercise Homework Show me it is working (show off the 3 clothing

items you designed in part 6) Show me your comments, test cases, etc

• Grades: 100, 80, 60

Page 13: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Booleans

• True or False values

• We already saw how to code equalities and inequalities in Scheme: (= x 5) (< x y) (>= x z) => These are called relational operations

Page 14: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Compound Conditions

• If we want two conditions to be true, use the and operator (and (= x y) (< y z))

• If we want at least one of the conditions to be true, use the or operator (or (= x y) (< y z))

• If we want the negation to be true, use the not operator (not (= x y))

Page 15: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Example

• Using Scheme to test a solution for polynomial; equation1: number --> boolean; to determine whether x is a solution for x^2 + 2x + 1 = 0(define (equation1 x)

(= (+ (* x x) (+ (* 2 x) 1)) 0));Test Cases(equation1 -1) “should be” true(equation1 1) “should be” false Why did I put the zero on a

separate line?

Page 16: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Symbols

• A symbol in Scheme is a set of characters preceded by a single quotation mark (no spaces allowed within symbol)

• Examples: ‘dog ‘east ‘chocolate ‘hello ‘WakeUp

Page 17: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Conditional Functions

• Sometimes what we want our program to do depends on certain conditions

Is it raining?

Yes No

Take an Umbrella

Bring aswimsuit

(= x 0)

Yes No

Say “Can’t divide by zero”

(/ y x)

Page 18: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Conditionals in Scheme

(cond

[question answer]

[question answer])

(cond

[question answer]

[else answer])

Arbitrary # of cond-lines

Each cond-line has a condition (question) and a result (answer)

Page 19: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Example Conditional

;sign: number --> symbol; consume number and returns whether num is; zero, pos, or neg(define (sign anum)

(cond [ (= anum 0) ‘zero] ; question answer [ (> anum 0) ‘positive] [ (< anum 0) ‘negative] ) )

; Test Cases(sign 0) “should be” ‘zero(sign 40) “should be” ‘positive(sign -222) “should be” negative

Page 20: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Interest Rate

• Some banks pay different levels of interest for saving accounts. The more a customer deposits, the more the bank pays. In such arrangements, the interest rate depends on the interval into which the savings amount falls. To assist their bank clerks, banks use interest-rate functions. An interest function consumes the amount that a customer wishes to deposit and responds with the interest that the customer receives for this amount of money.Suppose the bank pays 4% for deposits of up to $1,000 (inclusive), 4.5% for deposits of up to $5,000 (inclusive), and 5% for deposits of more than $5,000.

• Write the interest-rate function for the bank.

Page 21: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Writing Conditionals

• Start by sketching the “outline” of a conditional expression (for the right number of questions)

Then fill in the questions

(cond[(<= amount 1000) …]

[(<= amount 5000) …][(> amount 5000) …])

(cond

[() …]

[() …]

[() …])

Then fill in the answers

(cond[(<= amount 1000) .040]

[(<= amount 5000) .045][(> amount 5000) .050])

Page 22: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Data Analysis

• Data analysis - understand the different situations that the problem statement discusses Enumerate all possible situations

• Adds a step to the design recipe

Page 23: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Check your understanding

Develop the function interest. Like interest-rate, it consumes a deposit amount. Instead of the rate, it produces the actual amount of interest that the money earns in a year. The bank pays a flat 4% for deposits of up to $1,000, a flat 4.5% per year for deposits of up to $5,000, and a flat 5% for deposits of more than $5,000.

Page 24: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Wednesday & Thursday

Lab Days

Page 25: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Scheme: Symbols

Chapter 5 of HTDP

Ms. Knudtzon

September 16

Page 26: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Checkpoint

• Lab/Homework exercises on conditionals Show me structure of code and test cases

working

• 80 point quiz #2

Page 27: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Symbols Operations

• Scheme has one basic operation for symbols, a comparison operator which returns true if the two symbols are identical The operator is: symbol=?

• To use it:(symbol=? ‘Hello ‘Hello)(symbol=? ‘hello ‘howdy)(define x ‘hello)(symbol=? ‘hello x)

Note: It is case-sensitive!

Page 28: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Strings

• As some of you have found from experimentation, Scheme also provides strings, which must be enclosed in double quotes.

• There is also a String comparison operator, string=? It is also case-sensitive

Page 29: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Symbols/Strings

• Historical Note: Symbols were first introduced by researchers in AI who wanted to design functions that could have conversations with people

• For now, assume symbols & strings to be fairly interchangeable It mostly depends if you need spaces or not Later, we will learn more about the differences between strings &

symbols

Page 30: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Using Strings

• We could write a function that took in a greeting and made a response

;; reply: string --> string;; to determine a reply for the greeting s(define (reply s)

(cond[ (string=? s “Good Morning”) “Hi” ][ (string=? s “How are you?”) “Fine” ][ (string=? s “Good Afternoon”) “I need a nap” ][ (string=? s “Good Evening”) “Good night” ]))

;Test(reply “Good Morning”) “should be” “Hi”

Page 31: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Checking Input

• What if you wanted to check if the input you got was a string? Or if it was a number? Or if it was a symbol?

• Scheme has operators to do just that. Each of the following operators return a boolean (string? X) (symbol? X) (number? X)

Page 32: Scheme: Functions Chapter 3 of HTDP Ms. Knudtzon September 12.

Exercises

• Homework - On Website• In Class:

Exercise 5.1.2. Develop the function check-guess. It consumes two numbers, guess and target. Depending on how guess relates to target, the function produces one of the following three answers: 'TooSmall, 'Perfect, or 'TooLarge.

The function implements one part of a two-player number guessing game. One player picks a random number between 0 and 99999. The other player's goal is to determine this number, called target, with the least number of guesses. To each guess, the first player responds with one of the three responses that check-guess implements.

The function check-guess and the teachpack guess.ss implement the first player. The teachpack picks the random number, pops up a window in which the second player can choose digits, and hands over the guess and the target to check-guess. To play the game, set the teachpack to guess.ss using the Language|Set teachpack option. Then evaluate the expression

(guess-with-gui check-guess)

After check-guess has been thoroughly tested