Laboratory Exercises For Computer Science 151

User-Defined Procedures

User-Defined Procedures

Goals: This lab provides practice with simple user-defined procedures.

As section 2.2 of the textbook explains, a programmer can have Scheme construct a new procedure, not equivalent to any of the built-in ones, by writing a lambda-expression. For instance, Scheme recognizes the expression

(lambda (n)
  (* n n))

as a description of a procedure that, when called, squares its argument. Like any other value, this procedure can be given a name by means of a definition:

(define square
  (lambda (n)
    (* n n)))

Such a procedure can be called, just as if it were a built-in procedure:

> (square 12)
144


  1. Write a Scheme procedure (add2 a) that returns the sum a+2.

  2. Define a procedure f(x) = x² - 3x + 2 and evaluate it for x = 0, 1, 2, 3, 4 .

  3. Write a procedure (quadratic-root a b c) that finds one root of a quadratic equation
    ax² + bx + c = 0 using the quadratic formula. Use it to find a root of the above equation.

    Test your procedure by computing

     
         (quadratic-root 1 -5 6)
         (quadratic-root 2 -10 12)
         (quadratic-root 1 4 4).
    
    In each case, use algebra to check your answers.

    What are (quadratic-root 1 0 1) and (quadratic-root 1 0 2)?
    [Would these two examples work in other programming languages that you know?]

  4. Write a procedure swap that interchanges the first two elements on a list, leaving the rest of the list unchanged. Thus, (swap '(a b c d e)) should return (b a c d e). In this problem, assume that the list given to swap has at least two elements; do not worry about the possibility that swap might be applied to numbers, empty lists, or lists with only one element.

  5. The volume of a sphere of radius r is 4/3 times pi times r3. Write a procedure named sphere-volume that takes as its argument the radius of a sphere (in, say, centimeters) and returns its volume (in cubic centimeters). Use this procedure to compute the volume of a softball (radius: eight centimeters).

  6. Define a procedure snoc (``cons backwards'') that takes two arguments, of which the second should be a list. snoc should return a list just like its second argument, except that the first argument has been added at the right end:
    
    > (snoc 'alpha '(beta gamma delta))
    (beta gamma delta alpha)
    > (snoc 1 (list 2 3 4 5 6))
    (2 3 4 5 6 1)
    > (snoc "first" '())
    ("first")
    
    Hint: There are two ways to define this procedure. One uses calls to reverse and cons; the other uses calls to append and list.

  7. Textbook Exercises: As you have time, work on exercises 2.1-2.5 from the textbook.

Work to be turned in: In turning in your work, write all definitions in a file. Then use submit, cat, scheme, load, etc. to run the procoedures, following the approach for listing and running programs outlined in the lab on Editing Scheme Files.

This document is available on the World Wide Web as

http://www.math.grin.edu/~walker/courses/151.fa98/lab-procedures.html

created January 22, 1997
last revised September 4, 1998