http://www.cs.dartmouth.edu/courseguide/undergrad/cs_68.html
This course provides a study of the principles of programming languages. The course will focus on the similarities and differences among conventional, functional, logic programming, and object-oriented languages. Topics include formal definitions of languages, control structures, methods for structuring data, scoping, types, and functions as first-class data values. For each language category, implementation issues will be discussed, and program development strategies illustrated through programming exercises.