Fall 2005

**Current Official Course Description.** *(Needs updating.)* This
course examines the major paradigms underlying modern programming languages. The
course currently focuses on object-oriented and logic programming. The rationale
of the paradigms is discussed along with typical programming idioms used with
them. Programming exercises are used to illustrate concepts--the course does not
aim to make students proficient programmers in all the language that will be
studied.

**More Accurate Description.** This course has two main components. The
first one aims to introduce students to major programming paradigms not covered
in other courses. The course currently focuses on logic programming and the
programming language Prolog. Topics covered include basic Prolog syntax,
unification and variable instantiation, backtracking, arithmetic, conditional
execution, cuts, repetition through backtracking, and tail recursion. The second
component of the course introduces students to some of the central issues and
techniques underlying the design and implementation of programming languages.
Topics covered include basic notions of regular expressions, grammars, lexical
analysis, parsing and the interpretation of high-level imperative languages.

**Prerequisites.** CS142 or equivalent.

**Location and Times.** Science Center 354, TuTh 8:00-9:15.

**Instructor.** Alexis Maciel. Science Center 379, 268-2385,
alexis@clarkson.edu.

**Office Hours.** M 2:30-4:30, Tu 3:30-4:30, W 9:30-11:30

**Required Text. **

- Michael A. Covington, Donald Nute and André Vellino,

**Course Objectives.**

- To learn the basic concepts and techniques of logic programming.
- To become familiar with the central issues and techniques underlying the design and implementation of programming languages.

- You will be able to write small Prolog programs.
- You will have a good understanding of how the Prolog interpreter works.
- You will understand some of the key issues arising in the design of programming languages.
- You will be familiar with some of the main techniques for implementing programming languages.

**Topics to be covered.** Logic programming: basic Prolog syntax,
unification and variable instantiation, backtracking, input and output, file
handling, arithmetic, conditional execution, cuts, repetition through
backtracking, tail recursion, trees, and sorting. Programming language design
and implementation: basic notions of regular expressions, grammars, lexical
analysis, parsing and the interpretation of high-level imperative languages.

**Grading. **Your evaluation will be based on several homework
assignments, two tests, two self-assessments of your performance on these tests,
one for each test, and a final exam. Your course grade will be computed using
the following formula:

The final exam will be cumulative and can be used to make up for half of each test. The minimum grade you can get on a self-assessment is the grade you got on the corresponding test. Tentative dates for the tests are October 13 and November 17. All students are required to write the final exam (no exemptions).

**Policy for missed work.** There will be no make-up assignments. Late
assignments may be accepted if a good excuse is provided and if arrangements are
made at a reasonable time, in advance, if possible. Make-up tests can be
arranged under the same conditions. Other special arrangements can be made for
students forced to miss more than a few days of class.