到達目標
記号処理のための関数型プログラミングに必要な考え方を理解し,データサイエンス分野における様々な問題を解決するための応用力を身につける.
ルーブリック
| 理想的な到達レベルの目安 | 標準的な到達レベルの目安 | 未到達レベルの目安 |
評価項目1 | 型無しラムダ計算に基づく関数型パラダイムを理解し,様々な問題を解決する方法を身につける. | 型無しラムダ計算に基づく関数型パラダイムを理解する. | 型無しラムダ計算に基づく関数型パラダイムが理解できない. |
評価項目2 | 複数のプログラミング言語における関数型パラダイムについて理解し,実践的な応用方法を身につける. | 複数のプログラミング言語における関数型パラダイムについて理解する. | 複数のプログラミング言語における関数型パラダイムについて理解できない. |
評価項目3 | 評価器実装を含むメタプログラミングについて理解し,プログラムをデータとして扱う方法を身につける. | 評価器実装を含むメタプログラミングについて理解する. | メタプログラミングについて理解できない. |
学科の到達目標項目との関係
教育方法等
概要:
データサイエンス分野で必要とされるプログラミング技術には,多くの言語が従来より採用している手続き型やオブジェクト指向型だけでなく,記号処理のためのプログラミングパラダイムのひとつとして,数学における関数の概念を基にした関数型のパラダイムに基づく手法がある.この科目では,近年,多くのプログラミング言語で採用されている関数型パラダイムについて,理論的な基礎となる型無しラムダ計算に基づくプログラミング手法と,記号処理におけるメタプログラミングの機能を備えた評価器実装のために必要な事柄を理解する.
授業の進め方・方法:
講義では,資料や板書による概念・手法の解説を,コンピュータを用いた実機デモと併せて行う.講義回ごとに演習課題を提示し,各自が用意するプログラミング環境を用いて演習を進める.
注意点:
講義中においても必要なプログラムの実装および実行確認を行う必要があるため,ノートPCや携帯端末による所定のプログラミング環境の各自所有・利用が必須である.
授業の属性・履修上の区分
授業計画
|
|
週 |
授業内容 |
週ごとの到達目標 |
前期 |
1stQ |
1週 |
関数型プログラミングの位置付けと歴史 |
関数型パラダイムとコンピュータの関係,プログラミング言語の特徴と歴史
|
2週 |
関数型プログラミングにおける手続きの表現(1) |
関数の表現と式の評価,ラムダ式による関数定義,述語関数と判断分岐,値への名前付け
|
3週 |
関数型プログラミングにおける手続きの表現(2) |
ループ式による関数適用,末尾再帰による繰り返し
|
4週 |
関数型プログラミングにおけるデータ構造(1) |
連結リストの構造,連想リストの活用,主要なリスト処理アルゴリズム,記号処理プログラミング
|
5週 |
関数型プログラミングにおけるデータ構造(2) |
高階関数の利用,遅延評価の考え方
|
6週 |
複数のプログラミング言語における関数型パラダイム応用(1) |
ラムダ式,三項演算子,配列,ハッシュテーブル
|
7週 |
複数のプログラミング言語における関数型パラダイム応用(2) |
関数型パラダイムのためのライブラリ
|
8週 |
(中間試験) |
|
2ndQ |
9週 |
型無しラムダ計算の基礎(1) |
ラムダ抽象,関数適用,束縛変数,α変換,β簡約
|
10週 |
型無しラムダ計算の基礎(2) |
カリー化によるプログラミング応用,不動点コンビネータ
|
11週 |
記号処理評価器の実装(1) |
関数型記述の評価の仕組みと位置付け,評価器の構造および構文評価のアルゴリズムと実装
|
12週 |
記号処理評価器の実装(2) |
データ構造評価のアルゴリズムと実装,レキシカルスコープとダイナミックスコープ
|
13週 |
メタプログラミング(1) |
他の言語のマクロとの違い,抽象構文木
|
14週 |
メタプログラミング(2) |
メタプログラミングによる応用例
|
15週 |
(期末試験) |
|
16週 |
総復習 |
|
評価割合
| 試験 | 発表 | 相互評価 | 態度 | ポートフォリオ | その他 | 合計 |
総合評価割合 | 100 | 0 | 0 | 0 | 0 | 0 | 100 |
基礎的能力 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
専門的能力 | 100 | 0 | 0 | 0 | 0 | 0 | 100 |
分野横断的能力 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |