岡山県立大学情報工学部情報通信工学科で2012年度まで実施していた講義「プログラミング言語II」 (旧名称:「計算機言語I」)の実施記録です。

講義のコンセプトと経緯

着任前から担当することが決まっていた講義の一つで、何かのプログラミング言語に関する講義、ということまでは 決まっていました。ただし、どのプログラミング言語を選ぶかは任されていました。で、実験その他でCを、 「計算機言語II」でJavaを取り上げているので、それ以外で、という ことで、選んだのがStandard MLでした。

それほど深く考えていたわけではありません。手続き型言語(C)とオブジェクト指向型言語(Java)をやっているから、 関数型か論理型なんだけど、どっちかといったら関数型かなあ。関数型だとLisp系がまず浮かぶけど、かっこが たくさんあると学生さんにはわかりにくいかなあ。じゃ、学生時代から憧れのあったStandard MLにするかな。 これくらいの考えでした。

けれど、この選択が結果的に正しかった。やり始めてすぐに、再帰を教える道具として非常に優れているということが わかってきました。パターンや高階関数といった、プログラミング言語のモダンな機能を紹介するのにも適している。 インタプリタ型なので、学生自身にパソコンで動かしてみさせることもしやすい。何より自分自身、Standard ML という言語が好きになりましたし、再帰も非常に深く理解するようになりました。

Ullmanの書いた優れた入門書があったのも大きかったです。Ullmanはデータ工学分野の著名な研究者ですが、本人 が前書きで書いている通り、Standard MLについては素人です。でもそれが逆によくて、理論に踏み込み過ぎず、 かといって単なる入門書でもない、情報工学の教科書としては絶妙な難易度になっています。これがなかったら、 正直、講義が成功していたかはわかりません。

途中からは、ちょうど同時期にC言語の実験を担当することになりまして、こちらでもリストや2分木といったデータ構造 を扱うプログラミングをさせました。つまり、再帰という、プログラミングにおいて重要な概念を、Standard MLという 優れた道具による講義と、C言語による実践とを同時並行的に教える、ということができたのです。偶然とはいえ、 かなり理想的な教育ができたと思っています。

ソフトウェア開発者としても教育人としても、この講義、そしてStandard MLという言語から学んだことは大きかったです。

関連ブログ投稿

プログラムコード

講義の実施にあたり作成したStandard MLのプログラムをGitHubで公開しています。

平成22年度シラバスより

概略

リスト処理、再帰、型など、計算機工学において重要なソフトウェア技術について、型付き関数型プログラミング言語 ML によるプログラムを用いて解説する。また、高階関数、多相など、C 言語にはないが現代のプログラミング言語において重要な考え方についても解説する。

授業の到達目標

以下の 2 点を理解することを目標とする。(1) リスト、木などの再帰的データ構造と、それを対象とする再帰的 アルゴリズム (2) プログラミング言語の動作モデル、型、高階関数、多相など、ソフトウェアの基礎概念。具体 的な目安としては次の 2 点が目標となる。(1) 実際にアルゴリズムを設計し、ML でプログラムを記述できるよ うになること (2) 講義で扱った範囲内で任意のプログラムの動作や型などの説明ができること

教材

参考書として以下の書籍を用いました。

  • Jeffrey D.Ullman, Elements of ML Programming (ML97 Edition), Prentice-Hall, 1998.

講義メモ

おおむね以下の順序に従って講義を進めました。

  1. 導入
  2. 式、型
  3. 変数、環境
  4. 組、リスト
  5. 関数
  6. 再帰関数
  7. パターン
  8. 局所変数
  9. 高階関数
  10. 多相関数
  11. 線形時間のreverse
  12. 新しい型を定義する

定期試験問題