2025 (Current Year) Faculty Courses School of Computing Undergraduate major in Computer Science
Functional Programming Fundamentals
- Academic unit or major
- Undergraduate major in Computer Science
- Instructor(s)
- Takuo Watanabe / Sosuke Moriguchi
- Class Format
- Lecture/Exercise (Face-to-face)
- Media-enhanced courses
- -
- Day of week/Period
(Classrooms) - 3-4 Mon (M-124, 情報工学系計算機室) / 3-4 Thu (M-124, 情報工学系計算機室)
- Class
- -
- Course Code
- CSC.T263
- Number of credits
- 110
- Course offered
- 2025
- Offered quarter
- 4Q
- Syllabus updated
- Sep 29, 2025
- Language
- Japanese
Syllabus
Course overview and goals
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.
Course description and aims
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.
Keywords
procedural abstraction, lists, scope, mutable data, immutable data, composite data, side effects, higher-order functions, closures, delayed objects, streams, continuations, macros, interpreters, type systems
Competencies
- Specialist skills
- Intercultural skills
- Communication skills
- Critical thinking skills
- Practical and/or problem-solving skills
Class flow
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/Objectives
Course schedule | Objectives | |
---|---|---|
Class 1 | Course Introduction, Typology of Programming Languages, Overview of Scheme |
Specified in the class |
Class 2 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 3 | Primitive data, Lists, Scope, Recursion |
Specified in the class |
Class 4 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 5 | Composite data, Mutable and immutable data, Side effects |
Specified in the class |
Class 6 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 7 | Higher-order functions, Closures, Delayed objects and streams |
Specified in the class |
Class 8 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 9 | Continuations and control abstraction, Macros |
Specified in the class |
Class 10 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 11 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 12 | Interpreters |
Specified in the class |
Class 13 | Programming practices corresponding to the previous lecture |
Specified in the class |
Class 14 | Type systems, Wrap up |
Specified in the class |
Study advice (preparation and review)
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.
Textbook(s)
Not specified
Reference books, course materials, etc.
Racket Documentation (https://docs.racket-lang.org)
Matthias Felleisen, Robert Bruce Findler, Matthew Flatt & Shriram Krishnamurthi, How to Design Programs (2nd edition), MIT Press, 2014 (https://htdp.org)
Revised5 Report on the Algorithmic Language Scheme (http://www.schemers.org/Documents/Standards/R5RS/)
Evaluation methods and criteria
Programming practices (50%)
Final exam (50%)
Related courses
- CSC.T241 : Fundamentals of Computing
- CSC.T243 : Procedural Programming Fundamentals
- CSC.T253 : Advanced Procedural Programming
- CSC.T273 : Object-Oriented Programming
Prerequisites
Finishing the following courses is highly recommended.
CSC.T241 : Fundamentals of Computing
CSC.T243 : Procedural Programming Fundamentals (CSC.T244: Creative Programming Projects is also acceptable)
CSC.T253 : Advanced Procedural Programming (CSC.T244: Creative Programming Projects is also acceptable)
Other
The computer facility may limit the number of students. In that case, the students of computer science department gain a priority.