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:
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