[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