担当講義

リベラルアーツ演習Ⅱ   (ゲームプログラミング入門)

  • 主題と目標
    本講義では、簡単なゲームのプログラムを各自、実際に作成することで、 コンピュータで使われている言語がどのようなものかを体得します。 それを通して、問題解決を図るための基本的な考え方を習得します。
  • 授業計画
    1. 関数型ビジュアルプログラミングエディタ OCaml Blockly の基本的な使い方
    2. 画像の動かし方、時間変化、キーボード操作、マウス操作、終了判定など
    3. いろいろなゲームの作成
  • 学生へのメッセージ
    コンピュータの言語を本当に理解するためには、自分でプログラムを作成するのが早道です。 この授業では、関数型プログラミング言語を使って、各自、実際にプログラミングを行います。 最終的な目標は簡単なゲームのプログラムを作ることです。
    これまでにプログラミングの経験がある必要はありません。メールを送受信できれば十分です。 ですが、各自、本当にプログラミングをしてもらいますので、 しっかりした内容を吸収しようという気概を持って来てください。 十分な数の TA を配置して自由に質問をできる環境を整えますので、 やる気さえあれば誰でもついて来られると思います。 今年度(2020)は、基本的にオンラインで授業を行う予定です。必要に応じて対面による質問の受付も検討します。

データ構造とアルゴリズム

  • 主題と目標
    本講義では、配列、リスト、木構造といった基本的なデータ構造と、 それを使った各種の探索アルゴリズム、整列アルゴリズム等を 学習します。
  • 授業計画
    1. アルゴリズムと計算量
    2. 基本的データ構造
    3. 各種の探索アルゴリズム
    4. 各種の整列アルゴリズム
    5. その他
  • メッセージ
    データ構造とアルゴリズムは、情報科学の基礎科目の中でも中核となる重要な科目です。 ここで学ぶ概念はどのようなプログラミングをする上でも欠かせないものです。 基本的な考え方から、それを使ったプログラミングまで、 しっかりと確実に習得して欲しいものです。

関数型言語

  • 主題と目標
    本講義では、関数型言語OCamlを使って、関数型言語によるプログラミングと 型の重要性について学習します。
    講義と演習の両方を行い、最終的には「メトロネットワーク最短路問題」を 解くプログラムを作成します。
  • 授業計画
    1. OCamlの基本的な使い方
    2. 各種の構文、データ型、再帰関数、高階関数などの導入
    3. 小さなプログラムの実装
    4. メトロネットワーク最短路問題の実装
  • メッセージ
    関数型言語は、プログラミング言語の基本的な概念を学ぶ上でも、 大規模なプログラムを組む上でも、優れた言語です。
    また、型の概念は誤りの少ないプログラムを組む上で重要な役割を 果たします。
    将来、OCamlに限らず、どのようなプログラミング言語を使うことに なっても役に立つ考えを学べると思います。

コンパイラ構成論 (奇数年度開講)

  • 主題と目標
    本講義ではまず、字句解析、構文解析、各種最適化、コード生成といった コンパイラ構成技術について学習します。
    その上で、簡単な言語を設計し、そのコンパイラを作成します。
    さらに、いろいろな最適化の技法を使って、コンパイラがよりよい コードを出力するように工夫します。
  • 授業計画
    1. 字句解析、構文解析の復習とYacc、Lexの使い方
    2. 各種最適化
    3. コード生成
  • メッセージ
    コンパイラの理論を勉強して学習するだけでなく、実際に作成することを 目指しているため、それなりに大変な授業になっています。

計算モデル論 (偶数年度開講)

  • 主題と目標
    簡単な言語に対するインタプリタをいろいろな方法で実装します。
    small-step による実装、big-step による実装、高階関数の実装方法、 環境モデル、非局所的脱出の実現法など、 いろいろな言語機構を実装するための基礎技術について学習します。
    それを通して、プログラミング言語がどのように作られているかを 学習します。
  • 授業計画
    1. small-step によるインタプリタの実装
    2. big-step によるインタプリタの実装
    3. 高階関数の扱い
    4. より高度な言語機構
  • メッセージ
    これまでプログラミング言語と言うのは与えられたもので、 それを使うばかりだったと思いますが、 ここではプログラミング言語のインタプリタを実際に作成することで その中身がどのようになっているのかを学習します。
    これを通して、今までブラックボックスだったプログラミング言語の 中身を理解できるようになります。
    しっかりした内容を提供しますので、是非、最後までついて来て下さい。