Following the procedural programming paradigm delivered in "Procedural Programming Fundamentals" and "Advanced Procedural Programming", this course introduces different types of programming paradigm, namely functional programming. The course will present the principles behind the functional programming paradigm and its computational mechanism. The course will use a programming language Scheme.
Using an appropriate programming paradigm and a programming language for a given problem is essential for realising software regarding its description ease, understandability and maintainability. This course aims to make students acquire the ability to choose an appropriate programming paradigm for a given problem by the deep understanding of common and different concepts among various programming paradigms.
At the end of the course, students should
(1) be able to write recursive programs,
(2) be able to write programs in a functional programming language (scheme),
(3) be able to write programs handling list data structures and
(4) be able to write programs using the higher order concept.
procedure abstraction, variable data structures, stream, list operations, higher-order procedures, continuation
|✔ Specialist skills||Intercultural skills||Communication skills||Critical thinking skills||✔ Practical and/or problem-solving skills|
The course is twofold: classes for understanding fundamental concepts in the functional programming paradigm through the lectures and classes for acquiring skills to utilise those fundamental concepts through programming practices. Two types of classes will be interleaved through the course.
|Course schedule||Required learning|
|Class 1||Typology of programming languages and overview of Scheme||Specified in the class|
|Class 2||Programming practices corresponding to the previous lecture||Specified in the class|
|Class 3||Recursive programs, the scope of names and higher-order procedures||Specified in the class|
|Class 4||Programming practices corresponding to the previous lecture||Specified in the class|
|Class 5||Compound data and data abstraction||Specified in the class|
|Class 6||Programming practices corresponding to the previous lecture||Specified in the class|
|Class 7||List processing (transformation, filtering and folding)||Specified in the class|
|Class 8||Programming practices corresponding to the previous lecture||Specified in the class|
|Class 9||Assignment and closure||Specified in the class|
|Class 10||Programming practices corresponding to the previous lecture||Specified in the class|
|Class 11||The environment model||Specified in the class|
|Class 12||Delayed objects and stream||Specified in the class|
|Class 13||Programming practices corresponding to the previous lecture||Specified in the class|
To enhance effective learning, students are encouraged to spend approximately 100 minutes preparing for class and another 100 minutes reviewing class content afterwards (including assignments) for each class.
They should do so by referring to textbooks and other course material.
・Harold Abelson and Gerald Jay Sussman，Structure and
Interpretation of Computer Programs, 2nd Edition， The MIT Press,
・Revised5 Report on the Algorithmic Language Scheme
Programming practices (30%)
Final exam (70%)
※ Depending on the COVID-19 epidemic situation, we might not administer the final exam. In that case, the mark is based on only programing practices.
Finishing the following courses is highly recommended.
CSC.T241 ： Fundamentals of Computing
CSC.T243 ： Procedural Programming Fundamentals
CSC.T253 ： Advanced Procedural Programming
COVID-19 precautions may limit the number of students. In that case, the students of computer science department have a priority.