授業科目

関数型プログラミング
Functional Programming

担当者

准教授 ボサール アントワーヌ
前 月2

単位

2

到達目標

履修生は以前に経験したプログラミング(C, Javaなど)と離れて、関数型プログラミングの考え方を学ぶ。関数型プログラミングは、プログラムの状態ではなく、関数の評価に基づく。いわゆる関数型プログラミングは、計算機ハードウェアではなく、数学的な関数に基づく。よって、より自然的にプログラムの開発が可能である。関数型プログラミングは「モダーン・プログラミング」と考えてもいい。

プログラミング未経験の受講生も歓迎する。関数型プログラミングはCやJavaなどの命令型・オブジェクト指向プログラミングとは違う考え方なので、プログラミングが難しいと思っていた学生も、プログラミングの勉強の再スタートを切ることができる。

Students are usually familiar with imperative programming (C/C++, Java…). In this lecture, we will introduce another programming model, functional programming, using the Haskell language. While imperative programming is based on the state of a program, functional programming is based on the evaluation of functions. This different computational approach, or paradigm, has many advantages and applications. It has been gaining more and more attention from software engineers as it enables high-level object manipulation and easy program logic description. One could speak of modern programming.

授業内容

この講義では、主にHaskell言語を使って、関数型プログラミングの考え方を説明する。アルゴリズムを含めて、様々な応用(グラフィックス等)を紹介する。
13回目と14回目は、ハードウェアの抽象化を更に強化する方法を紹介する。具体的に、関数型プログラミングから論理プログラミングへの移行を話す。

The functional programming paradigm will be presented using mostly the Haskell language. Various applications of functional programming, including algorithms, will be introduced.
During Sessions 13 and 14, how to further increase the level of abstraction of programs will be addressed by discussing the transition from functional to logic programming.

授業計画

下記の予定で授業を行うが、時間配分によっては、多少の前後がありうる。小テストで誤答した課題や、授業中に理解できなかったことを、復習として使用書等により、調べることが必要である。100分の授業に対して、予習と復習をあわせた時間が4時間程度となること。

第1回 関数プログラミングの紹介
Session #1 – Introduction to functional programming
第2回 GHCi環境、Haskellシンタクスと評価、変数とデータ型
Session #2 – GHCi environment, Haskell syntax and evaluation model, variables and types
第3回 関数とカリー化、データ型(signatures, contracts)、スコープ
Session #3 – Functions and currying, types (signatures, contracts), variable scope (local / global bindings)
第4回 リストとタプル、無限リストと遅延評価、リスト内包表記
Session #4 – Lists and tuples, infinite lists and laziness, list comprehension
第5回 制御構造、再帰I
Session #5 – Control structures (if, guards), recursion (1)
第6回 パターンマッチング
Session #6 – Pattern matching
第7回 再帰II、整列法について
Session #7 – Recursion (2), sorting
第8回 演習
Session #8 – Exercises
第9回 型の同義語、抽象データ型
Session #9 – Type synonyms, abstract data types
第10回 応用例I(手続きグラフィックス:紹介、コッホ曲線)
Session #10 – Applications (1): procedural graphics (preamble, the Koch snowflake)
第11回 応用例II(手続きグラフィックス:ベジエ曲線)
Session #11 – Applications (2): procedural graphics (Bézier curves)
第12回 応用例III(手続きグラフィックス:三次元グラフィクス)
Session #12 – Applications (3): procedural graphics (3D graphics)
第13回 関数型プログラミングから論理型プログラミングへI(規則、質問、融合、単一化)
Session #13 – From functional to logic programming (1): rules, queries, resolution, unification
第14回 関数型プログラミングから論理型プログラミングへII(再帰的規則、リスト、演算、カット、否定)
Session #14 – From functional to logic programming (2): recursive rules, lists, arithmetic, cuts and negation

授業運営

原則、使用書に沿って授業をする。講義の中に、演習の時間を多少取ります。
何回かの授業を除いて、毎回の授業でLMS (dotCampusなど)を使って小テストを実施する。

評価方法

小テスト(30%)、定期試験(70%)の評価とする。
授業を5回以上欠席すると原則評価の対象としない。

オフィスアワー

木曜日3限、6-231。
別の時間帯の場合、事前予約を勧める。

使用書

Antoine Bossard『A Gentle Introduction to Functional Programming in English – 関数プログラミング入門, in English!』第2版 (second edition)[オーム社 (Ohmsha)]2018
電子書籍(ISBN: 978-4-274-80367-3)と紙版(POD=オンデマンド印刷。ISBN: 978-4-274-70060-6)あり

Copyright© 2017 Kanagawa University. All Rights Reserved.