理工学部Faculty of Science and Engineering
COT200XE(計算基盤 / Computing technologies 200)関数型プログラミングFunctional programming
藤田 憲悦Kenetsu FUJITA
授業コードなどClass code etc
学部・研究科Faculty/Graduate school | 理工学部Faculty of Science and Engineering |
添付ファイル名Attached documents | |
年度Year | 2022 |
授業コードClass code | H6160 |
旧授業コードPrevious Class code | |
旧科目名Previous Class title | |
開講時期Term | 秋学期授業/Fall |
曜日・時限Day/Period | 金3/Fri.3 |
科目種別Class Type | |
キャンパスCampus | 小金井 |
教室名称Classroom name | 各学部・研究科等の時間割等で確認 |
配当年次Grade | |
単位数Credit(s) | |
備考(履修条件等)Notes | |
他学部公開科目Open Program | |
他学部公開(履修条件等)Open Program (Notes) | |
グローバル・オープン科目Global Open Program | |
成績優秀者の他学部科目履修制度対象Interdepartmental class taking system for Academic Achievers | |
成績優秀者の他学部科目履修(履修条件等)Interdepartmental class taking system for Academic Achievers (Notes) | |
実務経験のある教員による授業科目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 | |
カテゴリー<理工学部>Category |
応用情報工学科 学科専門科目 |
すべて開くShow all
すべて閉じるHide All
Outline (in English)
The aim of this course is to help students learn basic features of functional programming languages and acquire techniques in functional programming. Moreover, students learn the advantage of functional programming and become capable of utilizing it appropriately as well.
The goals of this course are to learn
(1) standard method of program description in functional programming languages,
(2) the concept of recursive functions and inductive proofs,
(3) higher order functions and how to make them,
(4) polymorphic functions and its usage,
(5) inductive types and its usage,
(6) the principle of type checking and type inference, and
(7) lambda-calculus with beta-reduction.
授業で使用する言語Default language used in class
日本語 / Japanese
授業の概要と目的(何を学ぶか)Outline and objectives
ソフトウエア開発において重要な位置にある関数型言語の基本的な機能を学び関数型プログラミングのテクニックと基礎理論を習得する。また関数型言語の特徴を理解し効果的な利用方法を学ぶ。関数型プログラミングの実践経験を通じて問題を論理的に捉え、設計の透過性を高めるスキルを涵養する。
到達目標Goal
つぎの項目の習得をゴールとする。
(1) 関数型言語における標準的なプログラム記述方法
(2) 再帰的関数と帰納法の利用方法
(3) 高階関数の記述と利用方法
(4) 多相型関数の記述と利用方法
(5) 再帰的データ構造の記述と利用方法
(6) 型検査と型推論の方法
(7) ラムダ記法・ベータ変換と活用方法
この授業を履修することで学部等のディプロマポリシーに示されたどの能力を習得することができるか(該当授業科目と学位授与方針に明示された学習成果との関連)Which item of the diploma policy will be obtained by taking this class?
ディプロマポリシーのうち、「DP1」と「DP2」と「DP4」に関連
授業で使用する言語Default language used in class
日本語 / Japanese
授業の進め方と方法Method(s)(学期の途中で変更になる場合には、別途提示します。 /If the Method(s) is changed, we will announce the details of any changes. )
OCaml(Objective Caml)を初歩から学ぶことで関数型言語によるプログラミングの実際を学ぶ。OCamlは強く型付けされた言語であり、静的型システムにより実行時における型に関する安全性が保証されている。プログラミングの演習を通じてOCamlのみにとどまらず関数型言語一般に通用する技法と基礎理論を習得する。 オンラインでの開講に変更される可能性がある。この場合オンライン授業の方法や各回の授業計画の変更、成績評価方法の変更などについては、学習支援システムでその都度提示する。 課題等の提出・フィードバック等の仕方は学習支援システムまたは授業中に別途指示する。
アクティブラーニング(グループディスカッション、ディベート等)の実施Active learning in class (Group discussion, Debate.etc.)
なし / No
フィールドワーク(学外での実習等)の実施Fieldwork in class
なし / No
授業計画Schedule
授業形態/methods of teaching:対面/face to face
※各回の授業形態は予定です。教員の指示に従ってください。
第1回[未定/undecided]:プログラミング言語いろいろ
プログラミング言語の役割・種類・家系図、
OCaml(Objective Caml)の処理系
第2回[未定/undecided]:関数型言語の概要
関数型言語の特徴と利点、
手続き型 vs. 関数型、
数列・漸化式(数学B)の流儀でプログラムを書く
第3回[未定/undecided]:基本文法
基本データ型、
束縛変数とlet式、
関数型
第4回[未定/undecided]:再帰的関数
再帰的関数定義、
末尾再帰と繰り返し、
相互再帰
第5回[未定/undecided]:パターンマッチ
match式とパターンマッチを用いた関数定義、
要素の抽出
第6回[未定/undecided]:高階関数
高階関数の定義、
ラムダ式、
map、fold、filter
第7回[未定/undecided]:多相型関数
多相型関数の記述と利用方法
第8回[未定/undecided]:再帰的データ構造
再帰的データ構造の記述と利用方法
第9回[未定/undecided]:型推論
型検査・型推論の原理と方法
第10回[未定/undecided]:高度な話題
無限リスト、
継続、CPS変換と埋め込み
第11回[未定/undecided]:関数型言語のモデル
ラムダ計算、
ベータ変換の定義とその応用
第12回[未定/undecided]:型付きラムダ計算
形無しラムダ式と型付きラムダ式、
型割り当て規則
第13回[未定/undecided]:型検査と型推論
ユニフィケーション(単一化)、
型推論アルゴリズム
第14回[未定/undecided]:カリー・ハワード同型対応
プログラム生成・検証への応用
(プログラム=証明、型=論理式)
授業時間外の学習(準備学習・復習・宿題等)Work to be done outside of class (preparation, etc.)
【本授業の準備・復習等の授業時間外学習は、4時間を標準とする】
課題プログラミングに取り組む
テキスト(教科書)Textbooks
別途指定するオンラインテキストによる。但し、継続,ラムダ計算、型推論、カリー・ハワード同型(10回〜14回)についてはテキスト「数理パズルで楽しく学べる論理学」(コロナ社)による。
参考書References
「プログラミングの基礎」(浅井)サイエンス社(2007)
「数理パズルで楽しく学べる論理学」(藤田)コロナ社(2022)
「すごいHaskellたのしく学ぼう!」(田中・村主訳) オーム社(2012)
「プログラミング言語の基礎概念」(五十嵐)サイエンス社(2011)
成績評価の方法と基準Grading criteria
【評価方法】
レポート(50%)と定期試験(50%)による。
【評価基準】
本科目において設定した達成目標を60%以上達成している学生を合格とする。
オンラインでの開講となった場合、成績評価の方法と基準も(レポート100%などに)変更する場合がある。その場合の具体的な方法と基準は、学習支援システムで提示する。
学生の意見等からの気づきChanges following student comments
特になし
学生が準備すべき機器他Equipment student needs to prepare
授業にはノートPCを持参すること
その他の重要事項Others
オンライン授業への移行やアドレスなどはは学習支援システムを通じて連絡する。学習支援システムを通じた連絡がないか、確認怠らないようにすること。