トップページへ

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.