情報科学部Faculty of Computer and Information Sciences
COT311KA-CS-243(計算基盤 / Computing technologies 300)型システムと関数型言語Type Systems and Functional Languages
雪田 修一Yukita SYUICHI
授業コードなどClass code etc
学部・研究科Faculty/Graduate school | 情報科学部Faculty of Computer and Information Sciences |
添付ファイル名Attached documents | |
年度Year | 2022 |
授業コードClass code | J0527 |
旧授業コードPrevious Class code | |
旧科目名Previous Class title | |
開講時期Term | 秋学期授業/Fall |
曜日・時限Day/Period | 水2/Wed.2 |
科目種別Class Type | |
キャンパスCampus | 小金井 / Koganei |
教室名称Classroom name | 各学部・研究科等の時間割等で確認 |
配当年次Grade | |
単位数Credit(s) | 2 |
備考(履修条件等)Notes | |
他学部公開科目Open Program | |
他学部公開(履修条件等)Open Program (Notes) | |
グローバル・オープン科目Global Open Program | |
成績優秀者の他学部科目履修制度対象Interdepartmental class taking system for Academic Achievers | ○ |
成績優秀者の他学部科目履修(履修条件等)Interdepartmental class taking system for Academic Achievers (Notes) |
(1) 受講希望者 (受講検討中の者も含む) は、情報科学部学部Googleフォーム(https://forms.gle/ECvwxVe2NcxmrbTK9)で初回講義前までに希望申請をしてください。(※以下URLのご案内があるGoogleフォームとは異なるのでご注意ください。) (2) 以下のURLと教育開発支援機構事務局の案内に従って、履修希望の申請を行ってください。 https://www.hoseikyoiku.jp/risyu/index.html (3) 履修取消については、ご自身の所属学部の履修取消期間内に必ず同時に履修削除を行ってください。 |
実務経験のある教員による授業科目Class taught by instructors with practical experience | |
SDGsCPSDGs CP | |
アーバンデザインCPUrban Design CP | |
ダイバーシティCPDiversity CP | |
未来教室CPLearning for the Future CP | |
カーボンニュートラルCPCarbon Neutral CP | |
千代田コンソ単位互換提供(他大学向け)Chiyoda Campus Consortium | |
選択・必修Optional/Compulsory | |
カテゴリー(2022年度以降入学者)Category (2022~) | |
カテゴリー(2021年度以前入学者)Category (~2021) | |
カテゴリーCategory |
専門教育科目 専門科目 |
すべて開くShow all
すべて閉じるHide All
Outline (in English)
We study a type system and functional programming with Haskell. The concepts of functor, applicative, monad, and monoid are treated with concrete examples. Students will be able to write their own functors and monads. They will also be able to trace recursive calls typical in the "fold" design pattern. All these abilities are checked by the term examination (50%) and the weekly assignments (50%), in each of which an average student spends four hours.
授業で使用する言語Default language used in class
日本語 / Japanese
授業の概要と目的(何を学ぶか)Outline and objectives
型システムと関数型プログラミングの諸概念を代表的な言語であるHaskellを用いて学ぶ。Functor, Applicative, Monad, Monoid などの概念を多数の具体例の計算を通して理解する。
到達目標Goal
学生は関数型言語の型システムとその上で実行される入出力や状態をもつ計算の仕組みを理解し、副作用のない純粋な関数型の計算から副作用を隔離する機構であるMonadを適切に使えるようになる。
この授業を履修することで学部等のディプロマポリシーに示されたどの能力を習得することができるか(該当授業科目と学位授与方針に明示された学習成果との関連)Which item of the diploma policy will be obtained by taking this class?
ディプロマポリシーのうち「DP2」と「DP4-1」、「DP4-2」に関連
授業で使用する言語Default language used in class
日本語 / Japanese
授業の進め方と方法Method(s)(学期の途中で変更になる場合には、別途提示します。 /If the Method(s) is changed, we will announce the details of any changes. )
Haskellによるプログラミング体験を通じて型システムの実際を知る。型推論の意義と問題点を理解する。授業中にプログラミングを行うためPCを持参する必要がある。授業中の議論に受講生の積極的な参加を求める。授業で課した課題(小テストやレポート)等を取り上げ、授業内で全体に対してフィードバックを行う。
アクティブラーニング(グループディスカッション、ディベート等)の実施Active learning in class (Group discussion, Debate.etc.)
あり / Yes
フィールドワーク(学外での実習等)の実施Fieldwork in class
なし / No
授業計画Schedule
授業形態/methods of teaching:対面/face to face
※各回の授業形態は予定です。教員の指示に従ってください。
第1回[対面/face to face]:オリエンテーション
授業の目的と方法を説明する。履修すると判断した場合は次回までにHaskellの開発環境を構築しておく。
教科書 chapter 1.
第2回[対面/face to face]:Believe the Type
Type variable, type classを学ぶ。
第3回[対面/face to face]:Syntax in Functions
Pattern matching, guards, where, let, caseなどの用法を学ぶ。
第4回[対面/face to face]:Hello Recursion!
Recursionに親しむ。Quick sortを例にとる。
第5回[対面/face to face]:Higher Order Functions
Curried function, lambda expression, fold, ($)などについて学ぶ。
第6回[対面/face to face]:Modules
Moduleの扱いと作成方法を学ぶ。
第7回[対面/face to face]:Making Our Own Types and Type classes
新しいtypeやtype classの作成方法を学ぶ。Functorというtype classに触れる。型の型であるKindを理解する。
第8回[対面/face to face]:Input and Output
Pureな世界と副作用のある世界の分離をmonad機構で実現する。
第9回[対面/face to face]:More Input and More Output
乱数の扱いに触れる。簡単なゲームを作成する。
第10回[対面/face to face]:Functionally Solving Problems
逆ポーランド電卓、経路探索などへの簡単な応用。
第11回[対面/face to face]:Applicative Functors
Functorをさらに強化する機構について学ぶ。
第12回[対面/face to face]:Monoids
Monoidは様々な場面で登場する計算パターンであることを学ぶ。
第13回[対面/face to face]:A Fistful of Monads
Monad則について学ぶ。
第14回[対面/face to face]:まとめ
期末試験で取り上げる題材をもとに全てのトピックのまとめをする.
授業時間外の学習(準備学習・復習・宿題等)Work to be done outside of class (preparation, etc.)
毎週の課題への取り組み.
本授業の準備・復習等の授業時間外学習は、各週につき4時間を標準とします。
テキスト(教科書)Textbooks
Learn You a Haskell for Great Good!,
Miran Lipovaca,
No Starch Press.
Kindle版もある。 PDF is freely available.
参考書References
Haskell - the craft of functional programming (3rd edition)
Simon Thompson
Addison Wesley
成績評価の方法と基準Grading criteria
期内レポート(50%), 期末試験(50%)
学生の意見等からの気づきChanges following student comments
授業に必要なソフトウェアをうまく使えない学生がいた。躓きの主な原因はOS、ファイルシステム、シェルなどの基本が分かっていない所にあることを発見した。これらについては別の基礎科目で扱われているが適宜補足が必要であることを痛感した。
学生が準備すべき機器他Equipment student needs to prepare
貸与PCを授業中に使用する