Computer Science Fundamentals (CS153 2003S)
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[EC]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Lab Writeups]
[Outlines]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Misc:
[Experiments in Java]
[Scheme Reference]
[Scheme Report]
[CS153 2002S (Walker)]
[CS151 2003S (Rebelsky)]
[CS152 2000F (Rebelsky)]
[SamR]
Start DrScheme.
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
in writing this revised version.
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 or preconditions
does odd-factorial
impose on its argument?
b. What will happen if these preconditions are 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 recursive calls we make to the kernel procedure violates the precondition?
a. Define (using the six-P style), implement, and test a procedure
named index
that takes a symbol sym
and a
list ls
of symbols as its arguments and returns the index
of sym
in ls
. You should use 0-based indices
(so that the initial value in a list is at index 0).
> (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 (using the six P style), implement, 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) > (substitute 'in 'out null) () > (substitute "in" 'out null) substitute: expected a symbol as first parameter > (substitute 'in 'out (list 'alpha "beta" 23)) substitute: expected a list of symbols as third parameter
Friday, 15 September 2000 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~stone/courses/scheme/spring-2000/preconditions-and-postconditions.xhtml
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2000F/Labs/prepost.html
.
Monday, 18 September 2000 [Samuel A. Rebelsky]
Thursday, 22 February 2001 [Samuel A. Rebelsky]
Sunday, 4 March 2001 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2001S/Labs/prepost.html
.
Thursday, 10 October 2002 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2002F/Labs/prepost.html
.
Tuesday, 4 February 2003 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Courses/CS153/2003S/Labs/prepost.html
.
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[EC]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Lab Writeups]
[Outlines]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Misc:
[Experiments in Java]
[Scheme Reference]
[Scheme Report]
[CS153 2002S (Walker)]
[CS151 2003S (Rebelsky)]
[CS152 2000F (Rebelsky)]
[SamR]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Tue May 6 09:19:57 2003.
The source to the document was last modified on Tue Feb 4 09:24:12 2003.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS153/2003S/Labs/prepost.html
.
You may wish to
validate this document's HTML
;
;
Check with Bobby