Functional Problem Solving (CSC 151 2015F) : Labs
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] - [FAQ] [Teaching & Learning] [Grading] [Taking Notes] [Rubric] [Remote Access]
Current: [Assignment] [EBoard] [Lab] [Outline] [Reading]
Sections: [Assignments] [EBoards] [Labs] [Outlines] [Readings] - [Examples] [Handouts]
Reference: [Setup] [VM] [Errors] - [Functions A-Z] [Functions By Topic] - [Racket] [Scheme Report (R5RS)] [R6RS] [TSPL4]
Related Courses: [Curtsinger (2015F)] [Davis (2013F)] [Rebelsky (2015S)] [Weinman (2014F)]
Misc: [Submit Questions] - [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] - [Issue Tracker (Course)]
Summary: In this laboratory, we explore file creation, input, and output in Scheme.
a. Scan through this lab to determine what kinds of tasks you'll need to complete.
b. You should also scan through the reading on files in Scheme.
c. Open the reference on files in Scheme in a separate window.
d. Start the GIMP and MediaScript.
e. Make a copy of files-lab.rkt, the code for this lab.
The file /home/rebelsky/glimmer/samples/numbers.txt
contains five hundred and twenty-eight natural numbers.
a. Use sum-of-file from the reading to determine their sum.
b. How would you quickly determine if your attempt to sum those numbers was correct?
Citation: That file was copied from a similar file produced by Mr. Stone.
Using sum-of-file (and its helpers) as a
pattern, write a Scheme procedure, (file-size
"file-name") that takes as argument a string that names a file
and returns the number of characters in that file (that is, the number
of times that read-char can be called to read a
character from the file without returning the end-of-file object).
Find out what happens if sum-of-file or
file-size is given a string that does not name
any existing file.
In the interactions pane, write a series of expressions that will
create a file, my-info, with the following lines
(substituting your own name and major).
Name: _last_, _first_ Major: _major-or-undeclared_
The Scheme standard says that if you try to open an output port to a file that already exists, “the effect is unspecified”, i.e., anything might happen. Hence, designers of a particular implementation of Scheme are free to do what they choose.
a. Find out through experimentation what Racket does in this situation.
b. Search the Web for the Racket documentation on
open-output-file and find out how to
overwrite an existing file.
Write a Scheme procedure, (dump-info file-name last-name
first-name major) that, given four strings as parameters,
writes the following to the file named by file-name,
Name: last-name, first-name Major: major
Write a procedure, (, that takes the name
of a file as a parameter and returns a list of all the lines
of the file (with each line represented as a string). You can
certainly use the read-lines
filename)read-line procedure from
the reading as a helper for read-lines.
You might use sum-of-file as a pattern for
read-lines.
Write a procedure, (, that takes
the name of a file as a parameter and displays the contents of the
file with each line preceded by its line number. You may find it
useful to call upon the previous procedure to do the reading.
display-file
filename)
Use the store-divisors procedure from the reading
to draw up a list of the divisors of 120, storing them in a file named
divisors-of-120. Examine the file afterwards
and confirm that the answer is correct.
By the way, don't give this procedure an extremely large number as argument -- it's much too slow. There are more efficient ways to find divisors!
Write a Scheme procedure that takes as arguments two file names (an input file and an output file), counts the number of occurrences of each vowel in the input file, and writes the result to the output file. Note that the output file should have the following form (with numbers in place of the number signs):
a: ### e: ### i: ### o: ### u: ###
If you have time or inclination, extend your procedure to deal with all 127 ASCII characters.