Homework Assignment 2

Basic Functions in Racket

CS 3540
Programming Languages and Paradigms
Spring Semester 2018

Due: Tuesday, January 23, at 8:00 AM


Template Source File
This assignment gives you your first chance to write Racket functions. Download the file homework02.rkt and use it as a template for your submission. Please use the name homework02.rkt for your file!

This file includes a require expression at the top. It "imports" the rackunit module and enables you to use to write test cases for your solutions [ example code ]. The template file contains several test cases for you. Problems 3 and 5 ask you to write your own test cases.
Do Not Use...
You do not need any advanced Racket features to solve these problems, only simple expressions.
  • Do not use a let expression in any function.
  • Do not use an internal define in any function.
Helpful Functions
You may find the Racket primitives sqrt, expt, and abs useful on this assignment.
Background Reading
For Problem 5, I ask you to write Racket functions to compute the Body Mass Index for a person. Before starting work on that problem, please read the short selection below on Body Mass Index.

Background: Body Mass Index

According to the Centers for Disease Control, the Body Mass Index (BMI) is a reliable indicator of body fat content for most people. BMI does not measure body fat directly; we calculate it indirectly from a person's height and weight. Even so, research has shown that BMI correlates well to direct measures of body fat, such as weighing a person underwater and using dual energy x-ray absorptiometry. Those diagnostic tests are quite expensive. BMI is a cost-effective, easy-to-perform method of screening for weight categories that may lead to health problems.

To formula for is

    BMI =  weight / height2
where height is expressed in meters and weight is expressed in kilograms.

For example, one of my favorite UNI men's basketball players of recent years, Marvin Singleton, was listed as 6'-6" tall and 237 pounds. After we convert those values to metric, we find that Singleton had a BMI of 27.4.


  1. Write two Racket functions to convert measurements in English units to the metric system:
    For example:
         > (inches->meters 39.3701)
         > (inches->meters 78)
         > (pounds->kilograms 2.20462)
         > (pounds->kilograms 237)
    I have provided check-equal? expressions for all of these examples in your template file.

  2. a ten-foot ladder with a six-foot base
    A 10-foot ladder leans against a wall. If its base is 6 feet away from the bottom of the wall, then it reaches 8 feet high on the wall. This is a simple example of the Pythagorean theorem.

    Write a Racket function named ladder-height that takes two arguments, the length of the ladder and the distance at the base. Both are in feet. The function returns the distance up the wall reached by the ladder, also in feet. For example:
         > (ladder-height 10 6)
         > (ladder-height 13 5)
         > (ladder-height 20 3.5)     ; that's steep... be careful!!
    I have provided check-equal? expressions for all of these examples in your template file.

    You may want to create a function to square a number, and use it to compute the ladder's height.

  3. According to The Joy of Cooking, when you are cooking candy syrups, you should cook them 1 degree cooler than listed in the recipe for every 500 feet of elevation you are above sea level. For example, the recipe for Chocolate Carmels calls for a temperature of 244° Fahrenheit. If you were making your Chocolate Carmels in Denver, the Mile-High City, you would want to cook the syrup at 233.44°.

    Write a Racket function named candy-temperature that takes two arguments, the recipe's temperature in degrees Fahrenheit and the elevation in feet, and returns the temperature to use at that elevation. For example:
         > (candy-temperature 244 5280)    ;; Denver, baby!
         > (candy-temperature 302 977.69)  ;; the highest point in Cedar Falls
         300.04462                         ;;     is approx. 298m above sea level
         > (candy-temperature 302 -1401)   ;; the Dead Sea 1401 ft below sea level
    Write check-equal? expressions for these three examples.

  4. Generally, the dimensions of engineered components are not exactly the specified value, but rather within a certain tolerance of the specified value. The tolerance generally depends upon the application and the material being used. For example, a metal piece used in construction that is listed as 5 cm in length might actually be any length within 1 mm of 5 cm, that is, between 4.9 cm and 5.1 cm, inclusive.

    Write a Racket function named in-range? that takes three numbers as arguments: two numbers to compare, and a tolerance, epsilon. in-range? returns true if its first two arguments are within epsilon of one another, and false otherwise. For example:
         > (in-range? 4.95 5.0 0.1)
         > (in-range? 4.95 5.0 0.01)    ;; not anymore!
         > (in-range? 5.0 4.95 0.1)     ;; works both ways
         > (in-range? 5.0 5.95 0.1)
         > (in-range? 5.5 5.95 0.5)
    I have provided check-equal? expressions for all of these examples in your template file.

  5. Write a Racket function named body-mass-index to compute BMI values. This function takes two arguments, a height in inches and a weight in pounds. It returns the corresponding BMI value. For example:
         > (body-mass-index 78 237)
         > (body-mass-index 81 215)
    Write check-equal? tests for these three examples.

    You can check your program's results on other test cases using the Adult BMI Calculator provided by the CDC.

    Your body-mass-index function should call the inches->meters and pounds->kilograms functions you wrote for Problem 1 to compute its result.


By the due time and date, submit the following files:

Be sure that your submission follows all of the submission requirements. Use Save Interactions As Text... to create the file of interactions that you submit, and change the file extension to txt.

Eugene Wallingford ..... wallingf@cs.uni.edu ..... January 16, 2018