2024 年度 後期木曜日 2コマ・
6405 教室
担当: 香川 考司
対象: 大学院・創発科学研究科/工学研究科
工学研究科の第 3 Q「プログラミング言語論Ⅰ」(1 〜 8 週、シラバス)/ 第 4 Q「プログラミング言語論Ⅱ」(9 〜 16 週、シラバス) のホームページです。 受講者はこのページを随時チェックするようにしてください。
新しいものほど上に表示します。
(01/16)「プログラミング言語論Ⅱ」レポート (〆切 2/13(木) 18:00)
(11/14) 「プログラミング言語論Ⅰ」レポート (〆切 12/05)
(10/03)
昨年度の「プログラミング言語論」はセミスターの授業で 「プログラミング言語論」の前半は工学研究科 3Q「プログラミング・パラダイム」、 後半は工学研究科 4Q「プログラミング言語意味論」の読み替えでした。
(10/03) paiza.io ブラウザーからプログラムが実行できる、 オンライン実行環境です。Haskell も対応しています。
その他のオンライン実行環境:
オンライン実行環境(プログラミング言語別)
(10/03) Haskell をインストールしておいてください。 (現時点では GHCup を使用するのが推奨です。)
ここにリンクをはっていないファイルや、公開日前のファイルは 公開日までに変更する可能性があるので注意してください。
以下の第 1, 2, A, 3 章をまとめた PDF
以下の第 4, L, 5, U, 6, P, S, J, 7 章をまとめた PDF
grandchild(X, ieyasu).
myappend(X, Y, [1,2,3]).
パスワードのかかっているページは、 Microsoft アカウント(大学でメールを読むときに使うアカウント)で認証してください。
注意: 設定が変更されたのに、変更が反映されないときは、 いったんログアウトして、 再度アクセスを試みて下さい。
紹介スライド,
1 章 「プログラミング言語論の概要」,
Haskell のダウンロード、
2 章 「関数型言語 Haskell とは」(§ 2.1 〜 § 2.4.1「基本的なデータ型と演算子」)
2 章 「関数型言語 Haskell とは」(§ 2.4.1「基本的なデータ型と演算子」〜§ 2.4.4 「関数型」 )
2 章 「関数型言語 Haskell とは」(§ 2.5「パターンマッチング」〜 § 2.8「関数の中置記法化」)
10/31 は月曜振替日です。
2 章 「関数型言語 Haskell とは」(§ 2.9「部分適用とセクション」〜 § 2.12「リストの内包表記」)
2 章 「関数型言語 Haskell とは」(§ 2.12「リストの内包表記」〜 )、
A 章「Haskell のレイアウトルール」、
3 章「代数的データ型と型クラス」(〜 § 3.1「代数的データ型の定義」)
本日は対面授業です。
課題、 アップロード、3 章「代数的データ型と型クラス」(§ 3.2 「型クラスとは」〜)
3 章「代数的データ型と型クラス」(§ 3.8 「型クラスとサブタイピング」〜)
オンラインテスト問題 (Online Questions, English vers.)、 アップロード (upload)、
「プログラミング言語論Ⅰ」期末テスト・ペーパーテスト問題、 解答例
12/05 は都合により、遠隔で実施します。
12/05 の Teams の会議
(授業時間になったらクリックしてください)
4 章「モナド」
5 章「モナドと命令形言語の意味」
5 章「モナドと命令形言語の意味」(§ 5.5 〜)、 P 章「Prolog 超簡易入門」、 Try Prolog,
?- myappend([1,2], [3,4], Z0). |
これに myappend([H1|X1], Y1, [H1|Z1]) :- myappend(X1, Y1, Z1). が |
H1=1, X1=[2], Y1=[3,4], Z0=[1|Z1] で適用できる |
?- myappend([2], [3,4], Z1). |
これに myappend([H2|X2], Y2, [H2|Z2]) :- myappend(X2, Y2, Z2). が |
H2=2, X2=[], Y2=[3,4], Z1=[2|Z2] で適用できる |
?- myappend([], [3,4], Z2). |
これに myappend([], Y3, Y3). が |
Y3=[3,4], Z2=[3,4] で適用できてゴール節が消える |
まとめると Z0 = [1|[2|[3,4]]] (= [1,2,3,4]) |
?- myconcat([[1, 2], [3, 4, 5], [6, 7]], Xs). |
これに ② が Xs1=[1,2], Xss1=[[3,4,5],[6,7]], Ys1=Xs |
?- myappend([1,2],Zs1,Xs), myconcat([[3,4,5],[6,7]],Zs1). |
?- myappend([2],Zs1,Z1), myconcat([[3,4,5],[6,7]],Zs1). |
ただし Xs=[1|Z1] |
?- myappend([],Zs1,Z2), myconcat([[3,4,5],[6,7]],Zs1). |
ただし Z1=[2|Z2] |
?- myconcat([[3,4,5],[6,7]],Zs1). ただし Z2=Zs1 |
まとめると Xs=[1|[2|Zs1]] |
?- myconcat([[6,7]],Zs2). ただし Zs1=[3|[4|[5|Zs2]]] |
| ⋮ |
?- myconcat([],Zs3). ただし Zs2=[6|[7|Zs3]] |
これに対して ① が Zs3=[] で適用できゴール節が消える |
まとめると Xs=[1,2,3,4,5,6,7] |
U 章「ちっちゃな命令型言語 Util」、 6 章「接続」 (continuation)、 S 章「Scheme 超簡易入門」 (同・空欄補間済版)、
J 章「JavaScript 超簡易入門」、 7 章「Continuation-Passing Style (CPS)」、 7 章のプログラム
「プログラミング言語論Ⅱ」レポート(2/13 締切)
問題を公開しています。
(01/23 連絡)
本日の課題はキャンセルです。(そこまで進まなかったため)
L 章「ラムダ計算」
(再掲)「プログラミング言語論Ⅱ」レポート(2/13 締切)
本日は最後まで進むかどうかわからないので、課題は授業で進んだところまでとします。 また 1/23 の課題 もやってください。
授業評価アンケート
今年度(2024 年度)は時間の都合で、第 L 章「ラムダ計算」を 十分説明しきれませんでしたので、テストでは、ラムダ計算を出題しません。その代わりに 第 4 章「モナド」から出題します。 (Q 4.4.1 あるいは、問 4.4.2 のような IO モナドに関する問題になる予定です。)
それに伴い、今年度はペーパー試験を実施せず、オンライン試験のみとします。 オンライン試験は遠隔からも受験可能とします。
(昨年度の問題は 2023 年度「プログラミング言語論」の期末試験の問題を見てください。 昨年度は「プログラミング言語論」というセミスターの授業でしたが、今年度から「プログラミング言語論Ⅰ」「プログラミング言語論Ⅱ」の 2 つのクォーターの授業に別れました。)
02/06 の期末テストは、遠隔/対面どちらでも可とします。遠隔で受験する場合、必ず Teams の会議に参加してください。
02/06 の Teams の会議
(授業時間になったらクリックしてください)
これ以降の予定はありません。🐻🐼