プログラム言語論(ぷろぐらむげんごろん)
担当教員:
亀山幸義
(電子メイル: kam [at] cs.tsukuba.ac.jp) (オフィスアワー: 金 2限)
担当Teaching Assistant : 鳥居 (電子メイル: sho [at] logic.cs.tsukuba.ac.jp)
曜日・時限: 春AB 木3-4, 講義は 3A203教室、 演習は情報科学類計算機室 (3C113).
このページには,2015年度の『プログラム言語論』の 講義資料を置きます. 2014年度の資料等は、
こちらのページ
を見てください。
目次
ニュース・連絡事項
シラバス
manabaシステムのログインページ
(統一認証のユーザID, パスワードが必 要、登録キーは 6002421 です。)
講義資料
スケジュール
参考書籍
過去の期末試験の問題と解答
出席簿
連絡事項
6/18 までに締切がきたレポートについて、
提出状況表
を置きました。手作業で作成しているので、間違いがあり得ます。 受講生の皆さんは、各自、必ず自分の欄をチェックして間違いがあれば、 plm-report[at]logic.cs.tsukuba.ac.jp (TAと教員の二人)あてに、 メールで連絡してください。 [2015/06/18]
第8週の分の演習問題の関数goo に rec キーワードが落ちていて、 実行できませんでした。修正版を
ここ
に置いたので、こちらで考えてください。 [2015/06/18]
第10週のスライド、補足スライド等をアップロードしました。 このページの下の方を見てください。
また、昨年度の試験問題へのリンクが切れていたのを補修しました。
(レポート提出簿については、もう少し整理してから、今日の夜までにはmanaba にiアップロードします。) [2015/06/18]
[重要]
第9週に出題した
第8週のための演習課題
は、 課題1の肝心のプログラムに間違いがありました。(fooは 実質2引数関数なのに、 1つしか引数をあたえていませんでしたた。) 修正版をはりつけたので、そちらをダウンロードの上、解いてください。 なお、「評価しなさい」という問題ですが、「評価すると、こうなりました」 という結果だけ、さらっと書いてもらったのでいいです。(第8週のための問題 の、課題1は short quiz のつもりです。) [2015/06/11]
第9週のスライド、演習問題等をはりつけました。
第8週の講義スライド(
命令型言語
,
データ抽象
)を置きました。 [2015/06/04]
第8週の講義に関連して、 宿題が1つでています。 coinsマシンの chap7.mlファイルを見て、 6/17 までに提出してください。 [2015/06/04]
複数の引数をもつ関数についての補足
を書きました。 [2015/06/04]
演習については、一部できなかったところがある人でも、 ともかく、できたところまでをレポートに書いて提出してください。 (演習問題に取りくむことと、レポートを出すことが大事です。) [2015/06/03]
chap5.ml の演習問題のうち Y_v の問題 (5-5)において、 Y_v の「閉じ括弧」が1つ不足していました。修正しましたので、 chap5.ml を再度見てください。 なお、Sestofのテキストは正しいです。 [2015/06/03]
5-1, 5-2の演習問題でつまづいた人が多かったので、
補足説明
を書きました。 さらに質問があれば、遠慮なくメール等で聞いてください。 [2015/05/28]
5/28の講義スライド
を置きました。 [2015/05/28]
5/21 の講義スライドを置きました。 なお、今日の講義でやった内容に対応する演習を来週やりますので、 演習ファイルchap5.ml について予習しておいてください。 [2015/05/21]
5/14 の演習ファイルに、若干の答えを書きこんだファイルを、 coinsマシンの ~kam/plm2015/chap2-with-answer.ml, chap4-with-answer.ml といったファイルとして置きました。 [2015/05/21]
2回目の演習で口頭で説明した rlwrap や tuareg-mode についての補足説明を、
OCaml を使うために
というページに追加しました。 [2015/05/15]
うっかりしていて、4/23 の演習の解答例をウェブに置きわすれていました。
ここ
にあります。 [2015/05/14]
5/07 の講義スライド (
前半
、
後半
) を置きました。 [2015/05/07]
4/30 の
講義スライド
を置きました。 [2015/05/05]
教科書に掲載されているソースコードを、OCaml で動くように(ほんの わずかに)調整したものをTAの鳥居君が用意してくれました。 このページの
参考書籍
の項目を参照してください。 [2015/04/30]
このページに記載の tuaregモード(emacsでOCamlファイルを編集する ための便利なツールが4/23演習の時点のものは(バージョンが古くて)動かなかったので、 更新しました。使いたい人は、お手数ですが、再度、
このページの説明
を読んでやってみてください。 [2015/04/29]
4/23 の
講義スライド
を置きました。また、 レポートに関連して、
OCamlでの再帰関数の書き方、使い方
を用意し ました。 [2015/04/24]
4/16の授業のスライドを置きました.このページの下の方のリンクをたどって ください.
Manabaシステムの
この授業のページ
において、 4/16 の宿題の提出コーナーを設定しました。期限は 4/20の深夜です。[2015/04/16]
このページを作りました。[2015/03/09]
講義資料
授業の際にノートを取る、というのが非常に大事ですから、 今年度は、なるべく黒板を使って授業をするようにしますが、 参考資料として、スライドを置いておきます。
第1週(4/16): イントロダクション、 高級言語と低級言語、インタープリタとコンパイラ、抽象機械、構文論と意味論、手続き型言語と宣言型言語. (講義スライド
その1
,
その2
)
第2週(4/23)前半: OCaml入門、算術式の評価、、スコープ、束縛、静的束縛、閉じた式、自由変数 (Sestoft教科書 2章前半に相当) (
講義スライド
)
第2週(4/23)後半: 演習:
OCaml を使うために
OCamlプログラミング入門
(主専攻実験[S8]テキストの一部)
再帰関数の書き方(New!)
,
OCamlでの実装
Sestoft教科書
の付録における Crash Course in F# (下の方の"Back Matter" と書いてあるpp.245-278をダウンロードしてください。)
レポート問題:
課題ファイル
[課題2 or 課題2' or 課題3 の いずれか1つを提出すれば十分です]
レポート問題の一部の解答:
解答例
レポート提出先:
Manabaシステムのプログラム言語論のページ
第3週(4/30): スタック機械、コンパイル、 PostScript (Sestoft教科書 2章後半に相当) (
講義スライド
)
第4週 (5/7): 1階言語の抽象機械、環境と評価戦略、関数クロージャ (Sestoft教科書 2章の残りと4章に相当) (
講義スライド前半
、
講義スライド後半
)
第5週 (5/14): 演習:
演習に使うファイルは、/home/prof/kam/plm2015/ の下にあります。
ファイル名は chap1.ml, chap2.ml, chap4.ml, chap4a.ml です。
レポート問題:
課題ファイル
レポート提出先:
Manabaシステムのプログラム言語論のページ
課題の解答(一部)と、説明を加えたファイルを、 chap2-with-answer.ml, chap4-with-answer.mlとして、上記と同じ場所に置きました。
第6週 (5/21): 高階関数、制御構造、副作用、末尾再帰 (Sestoft教科書 5章を含む) (
講義スライド
)
今日の授業内容に対応する演習(レポート提出は求めませんが、自習しておいてください。)
ファイル:/home/prof/kam/plm2015/chap5.ml
自習すべき内容1. ex1以降の例題を動かし、理解する。
自習すべき内容2. 最後の演習問題をやってみる。
第7週 (5/28): 型システム (Sestoft教科書 6章) (
講義スライド
)
演習
ファイル:/home/prof/kam/plm2015/chap5.ml, chap5a.ml, enshu0528.ml
chap5.ml は先週のものから少し更新しています(末尾の演習問題が増えています。)
chap5a.ml は新しいファイルです。
enshu0528.ml は新しいファイルです。(.mlにしていますが、演習問題 だけが書いてあります。)
これらの演習問題を解いてmanabaから提出してください。ただし「発展問題」の解答は任意です。
第8週 (6/4): 命令型言語 (Sestoft教科書 7章,
講義スライド
)、 データ抽象、モジュール (
講義スライド
)
第9週 (6/11): オブジェクト指向 (
講義スライド
)
演習
第8週の分の演習問題:
修正版
(授業で配布したものは、課題1のプログラムが間違っていました。こちらをダ ウンロードしてください。)
第9週の分の演習問題:
こちら
Javaの動かし方
第10週 (6/18): 授業のまとめ: (
講義スライド
)
補足資料:
論理型プログラム言語
(今年は取り扱わず)、
関数型言語の補足(2015年度分)
、
関数型言語の補足(2014年度分)
期末試験
参考書籍
Programming Language Concepts, Peter Sestoft, Springer, 2012. (さらに新しい本、学部レベルの内容がコンパクトによくまとまっている。 2014年度以降はこの本に準拠して講義をおこなっている。) 電子ファイルは
こちら
です。(学内ネットワークからは無料でアクセス可能。)
教科書に掲載しているコード(をOCamlで動くようにしたもの)は、coins計算機の /home/prof/kam/plm2015/ の下に置いてある。(現在のところ6章まで)。 たとえば、第1章のソースコードを使うためには、 OCaml の対話的モードで #use "chap1.ml";; とすればよい。
著者のページは、
ここ
にあるので 参考にされたい。
Programming Languages: Principles and Paradigms, Maurizio Gabbrielli, Simone Martini, Springer, 2011. (学部レベルの内容がコンパクトによくまとまっている。 2012-2014年度はこの本(の一部)に準拠して講義をおこなった。) 電子ファイルは
こちら
です。(学内ネットワークからは無料でアクセス可能。)
Concepts in Programming Languages, John C. Mitchell, Cambridge University Press, 2003. (広範囲のことがまとめられている分厚い教科書、 2011年度まではこの本に準拠して講義をおこなっていた。 なお、この本の誤殖リストが
著者のページ
にある。)
期末試験の問題と解答
2014年度の期末試験の
問題
と
解答例
。 (2014/7/16)
2013年度の期末試験の
問題
と
解答例
。 (2014/6/25修正、2014/6/30再修正)
2012年度の期末試験の
問題
と
解答例
。
出席簿
出席簿は、まだありませんが、いずれ、以下のページに置く予定です。
manabaシステムのログインページ
(統一認証のユーザID, パスワードが必要、登録キーは 6002421 です。)
亀山幸義
(オフィスアワー: 水 2限)