2023 年度 後期木曜日 2コマ・
6405 教室
担当: 香川 考司
対象: 大学院・創発科学研究科/工学研究科
創発科学研究科の後期「プログラミング言語論—パラダイムと意味論」(シラバス) のホームページです。 受講者はこのページを随時チェックするようにしてください。
新しいものほど上に表示します。
(01/18)「プログラミング言語論」第 2 回レポート (〆切 2/15(木) 18:00)
一部、公開しました。
(11/09) 「プログラミング言語論」第 1 回レポート (〆切 12/07)
(10/05)
2022 年度第 3 Q「プログラミング・パラダイム」テスト(「プログラミング言語論」の中間試験) の問題(オンライン, ペーパー)と解答例 (一部)を公開します。
「プログラミング言語論」の前半は工学研究科 3Q「プログラミング・パラダイム」、 後半は工学研究科 4Q「プログラミング言語意味論」の読み替えでした。 なお、今年度は工学研究科の受講者がいないので、中間試験を実施するかどうかは未定です。
(10/05) paiza.io ブラウザーからプログラムが実行できる、 オンライン実行環境です。Haskell も対応しています。
その他のオンライン実行環境:
オンライン実行環境(プログラミング言語別)
(10/05) 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 章 「プログラミング言語の意味とは」,
2 章 「関数型言語 Haskell とは」(〜§ 2.2),
Haskell のダウンロード、
2 章 「関数型言語 Haskell とは」(§ 2.1 〜 § 2.4.1「基本的なデータ型と演算子」)
2 章 「関数型言語 Haskell とは」(§ 2.4.2 「リスト」〜§ 2.4.4 「関数型」 )
2 章 「関数型言語 Haskell とは」(§ 2.5「パターンマッチング」〜 § 2.8「関数の中置記法化」)
2 章 「関数型言語 Haskell とは」(§ 2.9「部分適用とセクション」〜 § 2.12「リストの内包表記」)
2 章 「関数型言語 Haskell とは」(§ 2.12「リストの内包表記」〜 )、
A 章「Haskell のレイアウトルール」、
3 章「代数的データ型と型クラス」(〜 § 3.2 「型クラスとは」)
3 章「代数的データ型と型クラス」(§ 3.3 「Haskell の型クラス」〜)
3 章「代数的データ型と型クラス」(§ 3.8 「型クラスとサブタイピング」〜)
12/07 は休講とします。補講は 12/14 の 5 校時に実施します。
4 章「モナド」
5 章「モナドと命令形言語の意味」
12/21 の授業は Zoom でも配信します。URL は DreamCampus を見てください。
課題、 アップロード、5 章「モナドと命令形言語の意味」(§ 5.7 〜)、 P 章「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 回レポート(2/15 締切)
問題を公開しています。
L 章「ラムダ計算」
6403 で実施(遠隔では受験できません。)
着席位置、 オンラインテスト問題、 アップロード、(← ここ以降の予定の開閉)