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]
a. Review the corresponding notes on
letrec
and named let.
b. Start DrScheme.
a. Define a recursive procedure, last-of-list
, a
recursive procedure that returns the last element of
a list.
b. Using that procedure, compute the sum of the last elements of
the lists
(3 8 2)
, (7)
, and
(8 5 9 8)
.
Note that you will probably need to make three calls to
last-of-list
.
c. Rewrite your solutions to the previous two problems using
a letrec
-expression in which
last-of-list
is locally bound to a recursive
procedure that finds and
returns the last element of a given list, and
(3 8 2)
, (7)
, and
(8 5 9 8)
.
The body of your expression should invoke last-of-list
three times.
Note that you are to write an expression and not a procedure (other than the
local last-of-list
) for part c of this exercise.
A non-empty list is an s-n-alternator if its elements are alternately symbols and numbers, beginning with a symbol. It is an n-s-alternator if its elements are alternately numbers and symbols, beginning with a number.
Write a letrec
expression in which
s-n-alternator?
and n-s-alternator?
are bound to
mutually recursive predicates, each of which determines whether
a given non-empty list has the indicated characteristic, and
(2 a 3 b 4 c 5)
fits either description.
Your letrec
expression should have the form
(letrec ((s-n-alternator? ...) (n-s-alternator? ...)) ...)
Note: By mutually recursive
, we mean two procedures that call each
other.
As you may recall, Iota
takes a natural number as argument
and returns a list of all the lesser natural numbers in ascending order.
a. Define and test a version of the iota
procedure that uses
letrec
to pack an appropriate kernel inside a husk that
performs precondition testing. This version of iota
should
look something like
(define iota (lambda (num) (letrec ((kernel ...)) ...)))
b. Define and test a version of the iota
procedure that uses
a named let
. This version of iota
should
look something like
(define iota (lambda (num) ... (let kernel (...) ...)))
Define and test a procedure, (take lst len)
,
returns a list consisting of the first len
elements of
the list, lst
, in their original order.
The procedure should signal an error if lst
is not a list, if
len
is not an exact integer, if len
is negative,
or if len
is greater than the length of lst
.
a. Define and test a procedure (intersection left
right)
that takes two lists of symbols as arguments and
returns a list of which the elements are precisely those symbols that
are elements of both left
and right
.
b. What does your procedure do if a symbol appears in both lists and appears more than once in one or both of the lists?
take
and intersect
to use whichever
of named let
and letrec
you didn't use
the first time.
No notes yet.
Monday, 24 October 2000 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~stone/courses/scheme/spring-2000/local-binding-and-recursion.xhtml
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2000F/Labs/letrec.html
Wednesday, 14 March 2001 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2001S/Labs/letrec.html
Tuesday, 15 October 2002 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2002F/Labs/letrec.html
Tuesday, 4 February 2003 [Samuel A. Rebelsky]
mutually recursive.
For those with extra timesection.
http://www.cs.grinnell.edu/~rebelsky/Courses/CS153/2003S/Labs/letrec.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:53 2003.
The source to the document was last modified on Tue Feb 4 21:41:12 2003.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS153/2003S/Labs/letrec.html
.
You may wish to
validate this document's HTML
;
;
Check with Bobby