| Schedule | Readings | Labs | Homework | Mechanics | Contact | |
| CSC 151-01, 2007S » Lab 6 » Characters and Strings | ||||||
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.
Contents:
Useful Procedures and Notation:
#\ch
(character constants) "string"
(string constants). #\a
(lowercase a) ... #\z (lowercase z); #\A
(uppercase A) ... #\Z (uppercase Z); #\0
(zero) ... #\9 (nine); #\space
(space); #\newline (newline); and #\?
(question mark). char->integer,
integer->char, char-downcase,
and char-upcase 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? make-string,
string, string-append
string-ref, substring
list->string,
number->string, string->list
string-length, 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 with the reading on characters and the reading on strings.
b. If you have not done so already, you may want to skim Section 6.3.5 of the Scheme Report.
c. Start DrScheme.
As you may recall, Scheme uses a collating sequence for the letters, assigning a sequence number to each letter. DrScheme 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 'hyperbola
is a string.
b. Write a Scheme expression to determine whether the character #\A
is a string.
c. Does the empty string count as a string?
Suggest 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 stringstris, 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 stringstris,(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 "
fruits
" because "
fruits
" are "
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 fruits
as "apples" and adjective
as "crunchy". What do you expect the value
of
like to be?
d. Confirm 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. Confirm that the definition of letter
works by using the following sub-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. Confirm your answer experimentally.
a. Create a file, davis.ss,
with the following
lines:
(define recipient "Professor Davis")
(define magazine "Information Processing Letters")
(define article "On the Computational Complexity of Peanut Butter")
b. Create a separate file, letter.ss 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 "davis.ss")
(load "letter.ss")
(display letter)
d. What do you expect to happen when you click Run?
e. Confirm your answer experimentally.
f. What ideas does this exercise suggest to you?
If you find that you have extra time on this laboratory, you may want to begin Homework 5, which extends the ideas of the final few exercises.
Janet Davis (davisjan@cs.grinnell.edu)
Created January 28, 2007 based on http://www.cs.grinnell.edu/~davisjan/csc/151/2006F/labs/06.chars_and_strings.html