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
-
Write a Scheme procedure (add2 a) that returns the sum a+2.
-
Define a procedure f(x) = x² - 3x + 2 and evaluate it for
x = 0, 1, 2, 3, 4 .
-
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?]
-
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.
-
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).
-
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.
-
Textbook Exercises: As you have time, work on exercises 2.1-2.5 from
the textbook.
Work to be turned in:
This document is available on the World Wide Web as
http://www.math.grin.edu/~walker/courses/151.sp99/lab-procedures.html
created January 22, 1997
last revised January 29, 1999