6.090 IAP '05 - Homework 2
Assigned Tuesday January 11th.
Due 10am Wednesday January 12th.
Submit a print-out of your .scm file. Should you
encounter difficulty printing, the file may be emailed to
bpe-staff@mit.edu.
Problem 1: Evaluation
The usual: type of expression, guess the value, then evaluate.
(lambda (x y z) x)
((lambda (x y) (+ x y)) 4 (+ 3 4))
((lambda (happy tiger) (if (= tiger 4) (+ happy tiger) happy))
4 5)
((lambda (wow this works) (wow this works))
- 7 5)
((lambda (wow this works) (works wow this))
7 - 5)
((if (= 4 5)
(lambda (x) (+ x 3))
(lambda (x) (+ x 5)))
7)
(define x 2)
((lambda (x) (+ x x)) 5)
((lambda (yummy) (* yummy yummy)) 5)
yummy
Problem 2: Writing Procedures
For each problem, write the specified procedure while obeying the
given constraints on what primitive procedures are available.
Additionally, test the procedure with a couple of inputs and include
these test cases and their results in your submission to demonstrate
that your procedure works.
- If you didn't finish problem 2 in the lecture handout, do so
(through positive-root).
- Write two procedures that use the following definitions to convert
days into minutes and minutes into days:
(define seconds-per-minute 60.0)
(define minutes-per-hour 60.0)
(define hours-per-day 24.0)
(define days-per-year 365.25)
(days->minutes 1)
;Value: 1440.0
(minutes->days 1)
;Value: 0.0006944444444444445
- Given the lengths of the sides of a right triangle, compute the
length of the hypotenous. You may use square and sqrt.
(define pythagoras
(lambda (a b)
- Write the procedure XOR. XOR is a a logical operator like AND or
OR, except that it has the following function: If both of the inputs
are true, or both of the inputs are false, it returns false. If the
inputs differ, it returns true. The truth table for XOR is as follows:
| X | Y | Output |
| #t | #t | #f |
| #t | #f | #t |
| #f | #t | #t |
| #f | #f | #f |
You can use boolean=? if you want (look it up in the reference manual).
(define xor
(lambda (x y)
- Write a procedure censor which takes as input a string,
and returns either the string or the string "BEEP", depending on
whether the input string contained any offensive material. For this
problem, any string which contains the phrase "scheme sucks" will be
deemed offensive. Thus:
(censor "I love scheme; it's so cool!")
;Value: "I love scheme; it's so cool!"
(censor "Dunno, but I think scheme sucks")
;Value: "BEEP"
You may find the primitive procedure substring? handy.
(define censor
(lambda (s)
Problem 3: Writing Recursive Procedures
For each problem, first write down your plan (base case,
recursive case) in english/math, then write the specified procedure
while obeying the given constraints on what primitive procedures are
available. Additionally, test the procedure with a couple of inputs
and include these test cases and their results in your submission to
demonstrate that your procedure works.
- Write a procedure slow-mul that multiples two
non-negative numbers together using only addition and subtraction (ie
not * or /).
(slow-mul 3 4)
;Value: 12
Plan - Base case:
Recursive case: x * y = ((x-1) * y) + y
(define slow-mul
- Write a procedure even? that returns true if it's input
is even. You may only use numerical comparisons and subtraction in
your solution.
(even? 35)
;Value: #f
Plan - Base case: if n < 2, n is even if n=0
Recursive case:
(define even?