You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Homework 1

Due: 11:59pm, Tuesday, Sep 08, 2020

100 points

For all Racket assignments in this course, set the DrRacket Language to Advanced Student (under How to Design Programs). Your assignment will be graded using the specified language level. If you use a different language level, your code may not work when it is graded.

  • Carefully follow the Sample Solution to a Programming Problem in the Racket HW Guide. Only half of the credit for each programming problem is based on the the correctness of your code as determined by our test cases. Much of the grade is based on how well you follow the design recipe.
  • Do the following programming problems:
    1. [10 pts] Develop the function contains? that consumes a symbol and a list of symbols and determines whether or not the symbol occurs in the list.
    2. [10 ptsDevelop the function count-symbols that consumes a list of symbols and produces the number of items in the list.
    3. [10 ptsDevelop the function count-numbers that counts how many numbers are in a list of numbers. 
    4. [20 ptsDevelop the function avg-price. It consumes a list of toy prices and computes the average price of a toy. The average is the total of all prices divided by the number of toys. toy prices are numbers. [Hint: develop several auxiliary functions (following the design recipe to develop each auxiliary function) that you can use to make the definition of average-price very easy.  If the list of toy prices is empty, the function avg-price produces an error message as described in Guidance below 
    5. [10pts] Develop the function elim-exp to eliminate expensive toys. The function consumes a number, called mp (short for "maximum price) and a list of toy prices, called lotp, and produces a list of all those prices in lotp that are below or equal to mp. For example
      (check-expect (elim-exp 1.0 (list 2.95 .95 1.0 5) (list .95 1.0)) = #true

       

    6. [10pts] Develop the function delete to eliminate specific toys from a list. The function consumes the name of a toy, called ty, and a list of names, called lon, and produces a list of names that contains all components of lon with the exception of ty. For example,

      (check-expect (delete 'robot (list 'robot 'doll 'dress empty)) (list 'doll 'dress)) = #true

       

    7. [30pts] A list can be used to represent a finite set. For example,  

      (list 'c 'o 'm 'p)

      represents the set of symbols {'c , 'o, 'm, 'p}.  In such a representation, we assume all elements in the list are unequal.   Develop the function power that consumes a list of symbols los (representing a set) and produces a list of list of symbols representing the power set (set of all subsets) of los.  Hint: write an auxiliary function cons-all that consumes a symbol sym and a list of list of symbols lolos and inserts symbol sym at the front of each list in lolos. 

      For example,  (check-expect (cons-all 'a (list (list 'c) (list 'o) (list 'm) (list 'p))  (list (list 'a 'c) (list 'a 'o) (list 'a 'm) (list 'a 'p))) = #true

      

  • Guidance:
    1. Follow the design recipe imitating Sample Solution to a Programming Problem .
    2. Problem 4 asks you to write a function that checks for the empty list as an input error and throws an aborting error in the case. (The purpose statement should document this behavior!) In DrRacket, the error function take a single argument not two arguments as documented in the book. We recommend using a string (text enclosed in double quotation marks like "An empty list of toy prices triggers this aborting error". You can test the error throwing behavior of a function using check-error which is documented in the DrRacket Help Desk.
    • Read chapter 8 very carefully before doing the problems from that chapter. This chapter is not padded with lots of wordy examples. 
    • To follow the design recipe, you must write down the purpose, contract, at least 5 well-chosen examples, write the code for the function, and include illustrative test cases for the function (using at least the examples you developed ahead of time). You can bundle the examples and test cases together as a block of check-expect invocations. Your chosen examples should illustrate the output you expect, and the test cases should produce the actual output (they should not be commented). If the function processes an inductive type, make sure that your examples include the base case(s) and sample inductive cases.

Submit your homework using the Comp 211 Owlspace page.

  • No labels