[Current] [News] [Glance] [Discussions] [Instructions] [Search] [Links] [Handouts] [Outlines] [Readings] [Labs] [Homeworks] [Quizzes] [Exams] [Examples] [Fall2000.01] [Spring2000]
If you have not done so already, scan the reading on preconditions and postconditions
a. Write the all-real?
procedure described in the
accompanying
reading.
b. What preconditions should all-real?
have?
c. Is it necessary to test those preconditions? Why or why not?
Revise the definition of greatest-of-list
given in the
corresponding reading so that
it prints a different (and appropriate) error message for each error
condition.
I'd recommend that you use cond
rather than if
.
Revise the definition of the count-from
procedure presented in
the reading on
recursion with natural numbers so that it enforces the precondition
that its first argument be less than or equal to its second argument.
Here is a procedure that computes the product of all of the odd natural
numbers up to and including number
:
(define odd-factorial (lambda (number) (if (= number 1) 1 (* number (odd-factorial (- number 2))))))
a. What precondition does odd-factorial
impose on its argument?
b. What will happen if this precondition is not met?
c. Revise the definition of odd-factorial
as a
husk-and-kernel program in which the husk enforces the precondition.
d. How can we be certain, in this case, that none of the calls we make to the kernel procedure violates the precondition?
a. Define and test a procedure named index
that takes a symbol
sym
and a list ls
of symbols as its arguments and
returns the number of list elements that precede the first occurrence of
sym
in ls
:
> (index 'gamma (list 'alpha 'beta 'gamma 'delta)) 2 > (index 'easy (list 'easy 'medium 'difficult 'impossible)) 0 > (index 'the (list 'and 'the 'cat 'sat 'on 'the 'mat)) 1
b. Arrange for index
to signal an error (by invoking the
error
procedure) if sym
does not occur at all as
an element of ls
.
Define and test a procedure named substitute
that takes three
arguments -- a symbol new
, another symbol old
,
and a list ls
of symbols -- and returns a list just like
ls
except that every occurrence of old
has been
replaced with an occurrence of new
. Use the husk-and-kernel
structure to make sure that new
and old
are
symbols and that ls
is a list of symbols before starting into
the recursion.
> (substitute 'alpha 'omega (list 'phi 'chi 'psi 'omega 'omega) (phi chi psi alpha alpha) > (substitute 'starboard 'port (list 'port 'starboard 'port 'port)) (starboard starboard starboard starboard) > (substitution 'in 'out null) ()
Friday, 15 September 2000
http://www.cs.grinnell.edu/~stone/courses/scheme/preconditions-and-postconditions.xhtml
Monday, 18 September 2000
[Current] [News] [Glance] [Discussions] [Instructions] [Search] [Links] [Handouts] [Outlines] [Readings] [Labs] [Homeworks] [Quizzes] [Exams] [Examples] [Fall2000.01] [Spring2000]
Disclaimer Often, these pages were created "on the fly" with little, if any, proofreading. Any or all of the information on the pages may be incorrect. Please contact me if you notice errors.
This page may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2000F/Labs/prepost.html
Source text last modified Mon Sep 18 11:58:46 2000.
This page generated on Mon Sep 18 11:59:34 2000 by Siteweaver. Validate this page's HTML.
Contact our webmaster at rebelsky@grinnell.edu