担当講義

コンピュータの言語   (ことばと世界9)

  • 主題と目標
    本講義では、簡単なゲームのプログラムを各自、実際に作成することで、 コンピュータで使われている言語がどのようなものかを体得します。   それを通して、問題解決を図るための基本的な考え方を習得します。
  • 授業計画
    1. 関数型プログラミング言語 Scheme の基本的な使い方
    2. 基本的なデータ、変数、条件文、再帰関数ほかの導入
    3. いろいろなゲームの作成
  • 学生へのメッセージ
    コンピュータの言語を本当に理解するためには、自分でプログラムを 作成するのが早道です。この授業では、関数型プログラミング言語 Scheme を使って、各自、実際にプログラミングを行います。 最終的な目標は簡単なゲームのプログラムを作ることです。
    これまでにプログラミングの経験がある必要はありません。 センターの計算機でメールを送受信できれば十分です。 ですが、各自、本当にプログラミングをしてもらいますので、 内容を吸収しようという、しっかりした気概を持って来てください。 十分な数の TA を配置して自由に質問をできる環境を整えますので、 やる気さえあれば誰でもついて来られると思います。

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

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

関数型言語

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

言語理論とオートマトン

  • 主題と目標
    プログラミング言語の理論的な取り扱いにおいて重要な役割を果たす 形式言語について、特に正則表現、正則言語、文脈自由文法などに ついて講義をします。
  • 授業計画
    1. 有限オートマトンと正則言語
    2. 正則表現
    3. 文脈自由文法と文脈自由言語
    ※上記と並行してプログラミング課題の説明有。
  • メッセージ
    言語理論は、コンピュータサイエンスの最も基礎的な理論のひとつで、 いろいろな分野でその考え方が使われます。多少、抽象的な部分も ありますが、わかりやすく説明していきたいと思っていますので、 是非、しっかりと習得して下さい。

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

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

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

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