Syllabus
CSCI 6220
Topics in Programming Languages
Fall 1999

Instructor:Karl Abrahamson
Office: Austin 233
Office hours: M-F9:35--10:35
Phone: 328-1879
Email: karl@cs.ecu.edu
Course web page: www.cs.ecu.edu/~karl/6220/fall99/

Emergency Numbers

The following web pages and phone number are available for emergency information.
severe weather
http://www.ecu.edu/oehs/emergency/SEVERE.HTM
university emergency notices (included closings)
http://www.ecu.edu/services/weatherpage.html
emergency information hotline
252-328-0062

Prerequisites

You should have had a course in data structures and be familiar with at least one procedural programming language, such as C, C++ or Pascal.

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.

Declarative languages have some advantages over imperative languages.

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

  2. The semantics (meaning) of declarative languages is much easier to study then the semantics of imperative languages. Even for imperative languages, the fundamental semantic concepts are rooted in a declarative programming framework.

  3. 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, even as it is used in an imperative setting. An understanding of declarative programming helps immensely in understanding all programming languages.

This course will cover the fundamentals of declarative programming. We will discuss the following topics.

  1. Functional programming.

  2. The formal underpinnings of functional programmings, including the lambda-calculus.

  3. Logic programming.

  4. 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 and two exams.

Astarte

One of the languages that we will use is Astarte. A manual is available at http://www.cs.ecu.edu/astarte.