Fundamentals of Computer Science I: Media Computing (CS151.02 2007F)
Primary: [Front Door] [Glance] - [Academic Honesty] [Instructions]
Current: [Outline] [EBoard] [Reading] [Lab] [Assignment]
Groupings: [Assignments] [EBoards] [Examples] [Exams] [Handouts] [Labs] [Outlines] [Projects] [Readings] [Reference]
Reference: [Scheme Report (R5RS)] [Scheme Reference] [DrScheme Manual]
Related Courses: [CSC151.01 2007F (Davis)] [CSC151 2007S (Rebelsky)] [CSCS151 2005S (Stone)]
Summary: In these exercises, you will explore a number of the standard Scheme procedures for handling characters and strings. You will also explore an application of these procedures for marking up text.
Constant notation: #\ch
(character
constants) "string"
(string constants).
Character constants:
#\a
(lowercase a) ... #\z
(lowercase z);
#\A
(uppercase A) ... #\Z
(uppercase
Z); #\0
(zero) ... #\9
(nine);
#\space
(space); #\newline
(newline); and
#\?
(question mark).
Character conversion:
char->integer
,
integer->char
,
char-downcase
, and
char-upcase
Character predicates:
char?
,
char-alphabetic?
,
char-numeric?
,
char-lower-case?
,
char-upper-case?
,
char-whitespace?
,
char<?
,
char<=?
,
char=?
,
char>=?
,
char>?
,
char-ci<?
,
char-ci<=?
,
char-ci=?
,
char-ci>=?
,
and char-ci>?
.
String predicates:
string?
String constructors:
make-string
,
string
,
string-append
String extractors:
string-ref
,
substring
String conversion:
list->string
,
number->string
,
string->list
String analysis:
string-length
,
String comparison:
string<?
,
string<=?
,
string=?
,
string>=?
,
string>?
,
string-ci<?
,
string-ci<=?
,
string-ci=?
,
string-ci>=?
,
string-ci>?
a. If you have not done so already, you may also want to open separate tabs in your web browser with the reading on characters and strings.
b. If you have not done so already, you may want to skim Section 6.3.5 of the Scheme Report.
c. No images needed in today's lab!
As you may recall, Scheme uses a collating sequence for the letters, assigning a sequence number to each letter. DrFu uses the ASCII collating sequence.
a. Determine the ASCII collating-sequence numbers for the capital letter A and for the lower-case letter a.
b. Find out what ASCII character is in position 38 in the collating sequence.
c. Do the digit characters precede or follow the capital letters in the ASCII collating sequence?
d. If you were designing a character set, where in the collating sequence would you place the space character? Why?
e. What position does the space character occupy in ASCII?
a. Determine whether our implementation of Scheme considers #\newline
a whitespace character.
b. Determine whether our implementation of Scheme indicates that capital B precedes lower-case a.
c. Determine whether our implementation of Scheme indicates that lower-case a precedes capital B.
d. Verify that the case-insensitive comparison operation (char-ci<?
) gives the expected result for the previous two tests.
e. Determine whether our implementation of Scheme indicates that #\a
and
#\A
are the same letter. (It should not.)
f. Find an equality predicate that returns #t
when given
#\a
and #\A
as parameters.
a. Write a Scheme expression to determine whether the symbol
'plaid
is a string.
b. Write a Scheme expression to determine whether the character #\A
is a string.
c. Does the empty string (represented as ""
) count as a string?
Develop three ways of constructing the string "???"
-- one using a call to make-string
,
one a call to string
, and one a call to
list->string
.
Here are two opposing views about the relationship between
string-length
and string-ref
:
“No matter what string str
is, provided that it's not the
empty string, (string-ref str (string-length str))
will return
the last character in the string.”
“No matter what string str
is, (string-ref str
(string-length str))
is an error.”
Which, if either, of these views is correct? Why?
Consider the definition
(define like (string-append "I like " person " because " person " is " adjective "."))
a. What other values must be defined in order for this definition to work?
b. What type must those values have?
c. Suppose you had previously defined person
as
"Ms. Davis"
and adjective
as
"cheerful"
. What do you expect the value of
like
to be?
d. Check your previous answer experimentally.
One criticism of the like
definition in the previous exercise
is that it takes a lot of lines. We could define a similar sentence as
follows:
(define tunes (string-append "I listen to " band " because their music is " adjective "."))
a. What are the comparative advantages and disadvantages of the single-line sentence-building definition?
b. Define band
and adjective
in such a way that
tunes
can be successfully defined.
We can, of course, use a similar technique to build longer form letters. Consider the following definitions
(define cr (string #\newline)) (define letter (string-append "Dear " recipient ", " cr cr "Thank you for your submission to " magazine ". Unfortunately, we " cr "consider the subject of your article, " article ", inappropriate for our" cr "readership. In fact, it is probably inappropriate for any readership." cr "Please do not contact us again, and do not bother other magazines with" cr "this inappropriate material or we will be forced to contact the " cr "appropriate authorities." cr cr "Regards," cr "Ed I. Tor" cr))
a. What must be defined for the definition of letter
to
succeed?
b. Check that the definition of letter
works by using the following associated definitions.
(define recipient "Professor Schneider") (define magazine "College Trustee News") (define article "Using Grinnell's Endowment to Eliminate Tuition")
c. You may note that the output is fairly ugly when you simply ask for
letter
. You can get nicer output by using the display
procedure, as in (display letter)
. Try doing so.
a. What changes are necessary to letter
so that name
of the article appears in quotation marks?
b. Check your answer experimentally.
a. Create a file, sam.scm
, with the following lines:
(define recipient "Mr. Rebelsky") (define magazine "Liberal Arts Letters") (define article "Why Every Faculty Member Should Take Introductory Computer Science")
b. Create a separate file, letter.scm
that contains the definition
of cr
and the updated definition of letter
from
the previous exercises.
c. In the definitions window, type the following
(load "sam.scm") (load "letter.scm") (display letter)
d. What do you expect to happen when you click
?e. Check your answer experimentally.
f. What ideas does this exercise suggest to you?
You may recall that the names of the ten basic circle brushes follow
a regular pattern: the word “Circle” followed by a space, an open paren,
an odd number, and a close paren. For example, the first circular brush
is "Circle (01)"
and the sixth circular brush is
"Circle (11)"
.
Write a procedure, (circular-brush n)
, that computes the
name of the
n
th circular brush. This procedure should throw an error
if n
is invalid. Please use the string procedures, such
as number->string
and
string-append
, in defining your procedure.
>
(circular-brush 1)
"Circle (01)"
>
(circular-brush 5)
"Circle (09)"
>
(circular-brush 8)
"Circle (15)"
>
(circular-brush "One")
Error: circular-brush requires an integer between 1 and 10>
(circular-brush -5)
Error: circular-brush requires an integer between 1 and 10>
(circular brush 1.5)
Error: circular-brush requires an integer between 1 and 10>
(circular brush 1925)
Error: circular-brush requires an integer between 1 and 10
Write another procedure to generate a form letter of your choice. Possibilities include acceptance letters to Grinnell, rejection letters, and recommendation letters.
Primary: [Front Door] [Glance] - [Academic Honesty] [Instructions]
Current: [Outline] [EBoard] [Reading] [Lab] [Assignment]
Groupings: [Assignments] [EBoards] [Examples] [Exams] [Handouts] [Labs] [Outlines] [Projects] [Readings] [Reference]
Reference: [Scheme Report (R5RS)] [Scheme Reference] [DrScheme Manual]
Related Courses: [CSC151.01 2007F (Davis)] [CSC151 2007S (Rebelsky)] [CSCS151 2005S (Stone)]
Copyright © 2007 Janet Davis, Matthew Kluber, and Samuel A. Rebelsky. (Selected materials copyright by John David Stone and Henry Walker and used by permission.)
This material is based upon work partially supported by the National Science Foundation under Grant No. CCLI-0633090. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.
This work is licensed under a Creative Commons
Attribution-NonCommercial 2.5 License. To view a copy of this
license, visit http://creativecommons.org/licenses/by-nc/2.5/
or send a letter to Creative Commons, 543 Howard Street, 5th Floor,
San Francisco, California, 94105, USA.