Authorised by Academic Registrar, April 1996
Objectives At the completion of this subject students should understand programming principles and be able to relate them to various application contexts; be familiar with the major programming paradigms and their representative languages; understand how programming principles are supported by these paradigms; and be able to select and deploy appropriate programming paradigms and languages in given application contexts when necessary, and have the ability to easily adjust to new programming paradigms.
Synopsis This subject presents a systematic account of programming principles and examines alternative programming paradigms. Topics include: review of imperative and object-oriented programming paradigms; study of the functional programming paradigm - functions, lists, polymorphism, higher-order functions, currying, lazy evaluation, equations, pattern matching; study of the logic programming paradigm - Horn clauses and their execution, logical variables, relations, data structures, search control; introduction of other programming paradigms and concepts, including parallel and distributed programming, co-routines, communication and synchronisation, and constraint programming. This subject emphasises how programming concepts and principles are supported in the different paradigms.
Assessment Examination (3 hours): 40% + Practical work: 60%