Syllabus
CSCI 6220
Topics in Programming Languages
Fall 2003

Class meeting 8:00pm-9:15pm TTh Austin 304
Instructor Karl Abrahamson
Office C-113 Science and Technology
Office hours MW 12:30pm-2:00pm, TTh 6:30pm-7:30pm or by appointment
Phone 328-9689
Email karl@cs.ecu.edu
Course web page www.cs.ecu.edu/~karl/6220/fall03/
My web page www.cs.ecu.edu/~karl/
Text Haskell: The Craft of Functional Programming by Simon Thompson


Prerequisites

You should have completed a course in data structures and be familiar with at least one higher level programming language. Prior study of programming languages will be helpful but is not required.


Introduction

Programming languages are broadly broken into two categories, the imperative languages and the declarative languages.

Imperative languages include C, C++, Ada, Pascal, Basic, and many more. The defining feature of imperative language is that a program is based on commands (often called statements) that call for changing something, such as the value of a variable.

The defining feature of a declarative language is the absence of commands. Instead, a declarative program consists of a collection of facts. Examples of declarative languages are Standard ML, Haskell and Prolog.

Many languages contain aspects of declarative and imperative programming mixed together. You can use one or the other, or mix as you like.

Declarative languages have some advantages over imperative languages.

  1. Declarative programs are often (but not always) easier to write than imperative programs, and consequently declarative programs tend to be less costly to develop than imperative programs. Because of this, techniques of declarative programming are gradually finding their way into more traditional settings.

  2. There are common kinds of errors that imperative programs can make that can never be made in a declarative language. This contributes to reliability of programs.

  3. The semantics (meaning) of declarative languages are generally easier to explain precisely. Fundamental concepts of programming language semantics are rooted in ideas that are mathematical and close to the way that declarative programs work.

  4. Declarative programs encourage the programmer to think in more conceptual, or abstract terms, and the best thought-out abstraction mechanisms are present in declarative languages. Learning to program in a declarative style helps in understanding abstraction, and helps to understand programming in an imperative setting. An understanding of declarative programming helps immensely in understanding all programming languages.

Declarative programs are generally either functional or logical. We will cover material from both kinds of declarative programming, including the following topics.

  1. Fundamentals of functional programming.

  2. Higher order functions.

  3. Reasoning about programs.

  4. The formal underpinnings of functional programming.

  5. Fundamentals of logic programming.

  6. The formal underpinnings of logic programming, including first-order logic.

The student will learn not only the fundamental concepts, but also will learn to write working programs.


Grading

Grading will be on the basis of programming assignments, homework, quizzes and a final exam.


Weather emergencies

In the event of a weather emergency, information about ECU can be accessed through the following sources:

ECU emergency notices http://www.ecu.edu/alert
ECU emergency information hotline 252-328-0062


Students with disabilities

East Carolina University seeks to comply fully with the Americans with Disabilities Act. Students requesting accommodations based on a covered disability must go to the Department for Disability Support Services, located in Brewster A-114, to verify the disability before any accommodations can be made. The telephone number is 252-328-6799.