CS 345, Programming Languages (Wilson)---Class Page
This is the home page for Paul Wilson's CS345
class.
THIS PAGE IS UNDER CONSTRUCTION. Things are subject to change.
BECAUSE THINGS MAY CHANGE, you should hit the RELOAD BUTTON in your
browser when you come to this page, to make sure you're seeing the
most recent version.
Online Course Readings and Reference Material
- Syllabus
- Lecture Notes on
Declarative Programming .
-
Course Notes on Scheme and its Implementation in html for web
browsing.
These notes are under construction. Only the first few sections
are reasonably well indexed for browsing, and the later sections
will change as the course goes along. Reading far ahead of the
class is likely to be an adventure.
I suggest that you use this web page with a browser while using
a Scheme system interactively. (Especially while working through
chapter 3, the tutorial.) This will allow you to cut text out of
the document and paste it into a running Scheme system.
THERE ARE ERRORS IN THIS TEXT, especially the later chapters.
That's another reason to read the html version with a browser,
rather than printing out a hardcopy. I'll correct most of the
errors before we get to those chapters.
- The
R4RS (Scheme language definition) in html format for online
browsing. This lists all of the standard features of Scheme and
(tersely) describes what they do. For most stuff in this course, my
Scheme course notes will be more helpful, but if you want to know
about miscellanous functions and exactly what they do, this is the
authority.
- First set of Practice
Questions . There's also a version with answers
.
- Second set of Practice
Questions . There's also a version with answers
.
- Quiz
1 (with answers) .
- Third set of Practice
Questions . There's also a version with answers
.
- Notes
on naming conventions and indenting for Scheme, which you
should consult when doing homework so that I can read your code and
grade it sensibly, and
notes on drawing data structures.
- Homework
assignment on writing merge sort in Scheme, and my
solutions to the first three problems. (Commented Scheme code.)
- Notes
on a simple reader, including regular expressions, BNF grammar,
and the actual code in Scheme.
-
Scheme code for a simple backward-chaining propositional calculus
theorem prover, which is essentially a little subset of Prolog,
and a set of
rules for classifying animals, i.e., a logic program about
kinds of animals, to play with using the theorem prover.
- A
picture of some class objects and instances to illustrate the
simple object system from the Scheme notes, and
another picture showing class objects and the metaclass object,
illustrating the circularity that makes the latter self-describing.
-
Scheme code for a simple object-based programming system based
on classes and generic procedures (inheritance not implemented
yet).
- Notes
on type systems, including inheritance and subtyping.
- Take-Home
Quiz and the answers
(and some explanations).
- Test
2 and a version of Test
2 with Answers (and some explanations).
The main language we'll be using in this course is Scheme ,
and by default the implementation to use is RScheme , which
is installed on the public cs SPARCs (running Solaris) and RS6000's
(running AIX). On the CS machine, you run RScheme with the command
/p/bin/runscheme .
If you use your own machine, and you're running Linux or Solaris
or any of several other implementations of UNIX, you can get
RScheme and install it on your machine---it's free. You can find it
from Donovan Kolbly's
Home Page . Be sure to get version 0.7 or later, and ask the TA
(Zhu Qing) for a patch to make it friendlier for newbies.
If you're using your own machine, and it's a Mac, I recommend
getting Gambit, Marc Feeley's implementation of Scheme. It's free
too. You can get it from the Scheme Repository (see below).
If you're using a PC running Windows or DOS, I'm not sure what
the best Scheme to get is. There are a bunch available at the
Scheme Repository. do not use MIT Scheme or Guile---they're
not standard Scheme. You might try Gambit-C by Mark Feeley, or
MzScheme, from Rice.
If you use something besides RScheme, I recommend getting the
Meroon (version 3) object system from the Scheme Repository when we
start doing object-oriented programming. For a few assignments, you
may have to use RScheme under UNIX to take advantage of RScheme's
object system, but for most things you should be able to use
Meroon.
The Scheme Repository
The Scheme
Repository at the University of Indiana has lots of free
implementations of Scheme, and various documents on Scheme. If you
get interested in learning more about Scheme than we cover in this
class, that's the place to look.
comp.lang.scheme
There is an internet newsgroup devoted to Scheme, comp.lang.scheme.
The main language we'll be using in this course is Scheme ,
and by default the implementation to use is RScheme , which
is installed on the public cs SPARCs (running Solaris) and RS6000's
(running AIX). On the CS machine, you run RScheme with the command
/p/bin/runscheme .
If you use your own machine, and you're running Linux or Solaris
or any of several other implementations of UNIX, you can get
RScheme and install it on your machine---it's free. You can find it
from Donovan Kolbly's
Home Page . Be sure to get version 0.7 or later, and ask the TA
(Zhu Qing) for a patch to make it friendlier for newbies.
If you're using your own machine, and it's a Mac, I recommend
getting Gambit, Marc Feeley's implementation of Scheme. It's free
too. You can get it from the Scheme Repository (see below).
If you're using a PC running Windows or DOS, I'm not sure what
the best Scheme to get is. There are a bunch available at the
Scheme Repository. do not use MIT Scheme or Guile---they're
not standard Scheme. You might try Gambit-C by Mark Feeley, or
MzScheme, from Rice.
If you use something besides RScheme, I recommend getting the
Meroon (version 3) object system from the Scheme Repository when we
start doing object-oriented programming. For a few assignments, you
may have to use RScheme under UNIX to take advantage of RScheme's
object system, but for most things you should be able to use
Meroon.
The Scheme Repository
The Scheme
Repository at the University of Indiana has lots of free
implementations of Scheme, and various documents on Scheme. If you
get interested in learning more about Scheme than we cover in this
class, that's the place to look.
comp.lang.scheme
There is an internet newsgroup devoted to Scheme, comp.lang.scheme.