Type Systems and Programming Languages

Slides:



Advertisements
Similar presentations
(Rubyistのための) 超音速:ML入門
Advertisements

JavaScript プログラミング入門 2006/11/10 神津.
12.3,E,-15, 12.3,E5,+,=, >,<,…,
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
型宣言 (Type Declarations)
OCommand : 型安全な シェルプログラミングのための 領域特化言語の提案
型宣言(Type Declarations)
情報工学概論 (アルゴリズムとデータ構造)
Survey: A Type System for Certified Binaries
条件式 (Conditional Expressions)
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
言語処理系(9) 金子敬一.
~sumii/class/proenb2010/ml4/
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
Solving Shape-Analysis Problems in Languages with Destructive Updating
テキストボックス、チェックボックス×2、コマンドボタンを配置する。 コマンドボタンに機能を与える
PROGRAMMING IN HASKELL
プログラミング言語論 第3回 BNF記法について(演習付き)
PROGRAMMING IN HASKELL
1 1.テキストの入れ替え 印刷のポイント テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
Macro Tree Transducer の 型検査アルゴリズム
1 1.テキストの入れ替え 印刷のポイント テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると「ライブラリ」から好きな写真を挿入することができます。
1 1.テキストの入れ替え 印刷のポイント テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。
Excel 2002,2003基本12 情報関数.
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
2 1 1.テキストの入れ替え テキストを自由に入れ替えることができます。 2.色の変更 好きな色に変更できます。
1 2 1.テキストの入れ替え 2.図のアート効果 テキストを自由に入れ替えることができます。
1 1.テキストの入れ替え 印刷のポイント テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると「ライブラリ」から好きな写真を挿入することができます。
1   1.テキストの入れ替え テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。 印刷のポイント.
ATTAPL輪講 (第4回) 続 Dependent Types
1 2 1.写真の入れ替え 2.テキストの入れ替え 印刷のポイント [書式]タブの[図の変更]から好きな写真を入れ替えることができます。
ペットへの コメント Sun Mon The Wed Thu Fri Sat
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
XXXXXX高校 XX期生 卒業記念 CALENDAR ▶ MON TUE WED THU FRI SAT SUN
国立情報学研究所 ソフトウェア研究系 助教授/
Type Systems and Programming Languages ; chapter 13 “Reference”
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
PROGRAMMING IN HASKELL
~sumii/class/proenb2009/ml4/
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると「ライブラリ」から好きな写真を挿入することができます。
2006/7/18(通信コース)2006/7/26(情報コース) 住井
情報処理Ⅱ 第7回 2004年11月16日(火).
~sumii/class/proenb2009/ml6/
5. 任意長の合成データ:リスト プログラミング論I.
PROGRAMMING IN HASKELL
Eijiro Sumii and Naoki Kobayashi University of Tokyo
関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
~sumii/class/proenb2010/ml5/
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
PROGRAMMING IN HASKELL
写真の入れ替え 2.テキストの入れ替え 印刷のポイント [書式]タブの[図の変更]から好きな写真を入れ替えることができます。
1 2 1.テキストの入れ替え 2.図のアート効果 テキストを自由に入れ替えることができます。
Haskell Programming Language
全体ミーティング(9/15) 村田雅之.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
2007/6/26(通信コース)2007/6/27(情報コース) 住井
Presentation transcript:

Type Systems and Programming Languages 11.9-11.12 takas 2001-05-14

11.9 Sums – sum type 異なる種類のデータを単一に扱う仕組み (variant types) の導入としての binary sum type 例) PhysicalAdrr = {firstlast:String, addr:String}; VirtualAdrr = {name:String, email:String}; というレコード型があったとき Addr = PhisicalAddr + VirtualAddr というものが sum type

11.9 Sums – tag: inl, inr 先の Addr 型の要素は PhysicalAddr, VirtualAddr の要素にタグをつけて生成する 例) pa : PhisicalAddr であるとき inl pa : Addr inl : PhysicalAddr → PhysicalAddr + VirtualAddr inr : VirtualAddr → PhysicalAddr + VirtualAddr

11.9 Sums - case sum type の要素が左右の枝のどちらであるかを判定するために用いる 例) getName : Addr → String getName = λa:Addr. case a of inl x => x.firstlast | inr y => y.name;

11.9 Sums – Uniqueness of Types 問題 T-INL, T-INR で型の唯一性が失われている inl t1 : T1 + T2 において T2 は何でもよいことになる Type checking が単なるボトムアップで済まなくなる 対策 Type checking アルゴリズムを変える (22章) “T2 の取りうるすべてのもの” を単一的に表す (15章) プログラマに T2 を指定してもらう (この章)

11.10 Variants Binary sum を拡張して任意個の型のunionを扱う inl, inr の代わりにラベルを用いて識別する Addr = <physical:PhysicalAddr, virtual:VirtualAddr>; a = <physical=pa> as Addr; # Addr getName = λa:Addr. # Addr → String case a of <physical=x> => x.firstlast | <virtual=y> => y.name;

11.10 Variants - Options 例) OptionalNat = <none:Unit, some:Nat> Table = Nat → OptionalNat; # Nat から Nat への mapping emptyTable = (λn:Nat. <none=unit> as OptionalNat) as Table; # emptyTable : Table extendTable = λt:Table. λm:Nat. λv:Nat. (λn:Nat. if equal n m then <some=v> as OptionalNat; else t n) as Table; # extendTable : Table → Nat → Nat → Table

11.10 Variants - Enumerations 全ラベルが Unit 型になっているもの Weekday = <mon:Unit,tue:Unit,wed:Unit,thu:Unit,fri:Unit>; nextBusinessDay = λw:Weekday. case w of <mon=x> => <tue=unit> as Weekday | <tue=x> => <wed=unit> as Weekday | <wed=x> => <thu=unit> as Weekday | <thu=x> => <fri=unit> as Weekday | <fri=x> => <mon=unit> as Weekday;

11.10 Variants - Single-Field Variants V = <l:T>; T の要素に対する操作を V の要素に直接適用できなくなる 例) Dollar = <dollars:Float>; Euro = <euros:Float>; Float という basic type を区別できるようになる dollars2euros = λd:Dollar. … というように型チェックができるようになる

11.10 Variants – Variants vs Datatype <l1:T1,…,ln:Tn> as T Datatype (OCaml で使われているもの) type T = l1 of T1 | … | ln of Tn;

11.10 Variants – Variants と Datatype の違い (1 of 2) 型とラベル(datatype constructor)の大文字小文字が逆 datatype constructor を使用するとき Type の記述が不要(OCaml) ラベルに対する型を省略可能で Unit になる Type Weekday = Mon | Tue | Wed | Thu | Fri

11.10 Variants – Variants と Datatype の違い (2 of 2) 再帰的表現 type NatList = nil | cons of Nat * NatList Type operator (引数付き datatype) type ’a List = nil | cons of ’a * ’a List

11.11 General Recursion Untyped λ-calculus 同様 fix を用いて再帰を表現する ff = λie:Nat→Bool. # (Nat → Bool) → Nat → Bool λx:Nat. if iszero x then true else if iszero (pred x) then false else if ie (pred (pred x)); iseven = fix ff; # Nat → Bool

11.11 General Recursion fix には関数だけが適用可能なわけではない ff = λieio:{iseven:Nat→Bool, isodd:Nat→Bool} {iseven = λx:Nat. if iszero x then true else ieio.isodd (pred x), isodd = λx:Nat. if iszero x then false else ieio.iseven (pred x)}; # ff : {iseven:Nat→Bool,isodd:Nat→Bool} → {iseven:Nat→Bool,isodd:Nat→Bool} r = fix ff; # r: {iseven:Nat→Bool,isodd:Nat→Bool}

11.12 Lists →, ×と同様の type operator List T (T の要素の有限長のリスト) 空リスト: nil[T] cons: cons[T] t1 t2 (t1:T, t2: List T) テスト: isnil[T] t (t:T)