It is a considerable advantage to know more than one programming language beforehand. It is an advantage but not a requirement to have taken the course Functional Design and Programming.
There are different kinds of programming languages: imperative languages (such as C), object-oriented languages (such as Java, Smalltalk, C#), and functional languages (such as Lisp, Scheme, Standard ML); statically typed languages (Java, C#, Standard ML) and dynamically typed languages (Lisp, Scheme, JavaScript, Perl). The second main theme of the course is to illustrate the different kinds of languages using interpreters, that is, programs that execute other programs.
A program written in e.g. C, Java, C# or Standard ML must be translated to machine code before it can be executed on the computer. This translation, or compilation, typically happens in several phases: syntax analysis, static checks (such as type checks), and generation of machine code. The third main theme of the course is static checks and the generation of machine code for abstract machines, including the Java Virtual Machine or Microsoft\'s Intermediate Language (part of the .Net platform).
The course uses the functional language Standard ML to present the various subject, because it is particularly well-suited for this purpose. Hence in the course you must also learn Standard ML.
Lectures, weekly assignments (homework), and computer exercises.After the course it makes good sense to do a four-week project, for instance the construction of a compiler for domain specific programming language.
Lecture notes: Basics of Compiler Design, by Torben Mogensen, DIKU 2003.
A good introductory book about Standard ML is Hansen and Rischel, Introduction to Programming Using SML, Addison-Wesley 1999.