プログラム理論特論
This presentation is the property of its rightful owner.
Sponsored Links
1 / 26

プログラム理論特論 第7回 PowerPoint PPT Presentation


  • 85 Views
  • Uploaded on
  • Presentation posted in: General

プログラム理論特論 第7回. 亀山幸義 [email protected] http://logic.is.tsukuba.ac.jp/~kam/progtheory. 前回. 前回:型付きラムダ計算の拡張 直積、リスト 多相型(導入のみ) 今回:型付きラムダ計算の拡張 多相型(続き) サブタイピング、レコード型. 型システムの拡張1ーリスト. リストのプログラミング. 基本的な操作関数 nil あるいは [ ] 空リスト cons(M, L) リストLの先頭に要素Mを追加する head(L) リストLの先頭要素

Download Presentation

プログラム理論特論 第7回

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3862629

プログラム理論特論第7回

亀山幸義

[email protected]

http://logic.is.tsukuba.ac.jp/~kam/progtheory


3862629

前回

  • 前回:型付きラムダ計算の拡張

    • 直積、リスト

    • 多相型(導入のみ)

  • 今回:型付きラムダ計算の拡張

    • 多相型(続き)

    • サブタイピング、レコード型


3862629

型システムの拡張1ーリスト


3862629

リストのプログラミング

  • 基本的な操作関数

    • nil あるいは [ ] 空リスト

    • cons(M, L) リストLの先頭に要素Mを追加する

    • head(L) リストLの先頭要素

    • tail(L) リストLの先頭要素を取り除いたリスト

    • empty?(L) リストLが空リストであるかどうか?

      head(nil)やtail(nil)の値がどうなるかはここでは気にしないことにする(本来ならば、エラーにすべき)

  • 省略形

    • cons(a, cons(b, cons(c, nil))) を [a, b, c] と書く。

    • head([a,b,c]) = a, tail([a,b,c]) = [b, c]


3862629

リストのプログラミング

  • リスト2つの連結 append と リストの反転reverse


3862629

リストのプログラミング

  • appendと reverseの計算


3862629

リストのプログラミング

  • appendを 型付きラムダ計算で記述すると。。。


3862629

リストのプログラミング

  • appendの型は多相型


3862629

リストのプログラミング

  • リストの長さlength, 2つのリストの併合merge


3862629

リストのプログラミング

  • リストを使ったQuick Sort


3862629

リストのプログラミング

  • リストを使ったQuick Sort


3862629

リストのプログラミング

  • qsort を「less-thanをもらって sortを行う関数」として定式化したら。。。


3862629

多相型の効用

  • 一般的なqsortの利用

    • データを順番に並べて保管したい(e.g. 学生の成績)

    • データは、いくつかの性質の記述からなる。

      • 学籍番号、英語の成績、算数の成績

    • 種々の変更

      • ある時、データの形式が変わった

        • 100点満点のデータがA,B,C,Dの4段階評価になった

        • TOEICと情報処理技術者試験の点数もいれることにした

      • 比較基準が変わった

        • 80点以上の科目の個数で並べていたが、Aの個数で比較することになった

    • それでも、qsortアルゴリズムには変更がないので、プログラムを書き換えたり、コンパイルしなおさなければいけないのだろうか?

  • 解決策

    • 型のないプログラム言語、いい加減な型システムを持っているプログラム言語では問題ない(が、プログラムの安全性、保守性が悪くなる。)

    • 型のあるプログラム言語では多相型


3862629

ML言語における多相型

  • MLでは多相型関数は、let宣言(あるいは、関数定義)に伴ったときのみ、定義できる。


3862629

ML言語における多相型

  • MLでは多相型関数は、let宣言(あるいは、関数定義)に伴ったときのみ、定義できる。


3862629

1980年代の話です。

(新しい)プログラミング・パラダイム

  • 新しいプログラミング・スタイルの記述

  • 論理型 logic programming

    • Prolog, GHC, ...

    • (制限された一階)述語論理の定理証明手続きをそのままプログラムの実行と見なそう、という立場

  • 関数型 functional programming

    • Lisp/Scheme, ML, ...

    • 「プログラム=関数=ラムダ式」

  • オブジェクト指向 Object-Oriented Programming

    • SmallTalk, ABCL, .. (今ではもちろんJava など)

    • オブジェクトを中心にプログラムを組み立てる


3862629

論理型プログラム言語のその後

  • もう終わった(基本的なスタイルは確立された)

    • e.g. ICOTプロジェクト

    • 広い範囲で使える実用的な言語としての地位は得られなかった

    • 特定の分野では使える

  • 基本的なスタイルからの脱却

    • 制約(Constraint)プログラミング

      • いろいろな問題を制約の集合として記述し、問題解決を制約解消に帰着する

      • 型推論も、α=β→γなどの制約の集合を解く問題と考えられる

    • 帰納学習との関連: 帰納論理プログラミング

      • f(3)=9, f(5)=25, f(6)=36 から f を求める問題


3862629

関数型プログラム言語のその後

  • まずまずの成功

    • 型システムと結びついて、プログラム言語の基礎的な研究はほとんどすべて関数型プログラムに基づいて行われるようになった

    • 他のパラダイム(オブジェクト指向など)も関数型をベースとして理解する方向

    • e.g. この授業

  • 実用性は?

    • 今のところ、成功しているとはいいがたい(教育、研究用の言語にとどまる)

      • 日々のプログラムをML, Lispで書いている人は研究者ぐらい?

      • 現在のコンピュータのアーキテクチャ上ではC言語などで書いた方が高速に実行される

    • ヨーロッパでは、高い信頼性を持ったプログラムを欲するPhilipsなどのメーカーがErLang言語などを使いはじめている

    • アプリケーション・プログラムのためのプログラム言語ではなく、システムの背後にひそむプログラム(コンパイラ、プログラムの検証システムetc.) を書く用途には適している


3862629

オブジェクト指向プログラム言語のその後

  • 実用的には大成功

    • プログラム言語の主流

  • 一方で、、、

    • プログラムの信頼性の向上のためにはまだまだ考えなければいけないことが多い

      • 意味論や形式的取り扱いが(関数型や論理型に比べて)不透明な部分がある


Object

オブジェクト指向言語(OO)におけるオブジェクト Object

  • ありふれた例だが。。。

2次元平面上の1点をあらわす

x座標、y座標を知りたい

あるベクトルにそって動かしたい

(3,5)


Object1

オブジェクト指向言語(OO)におけるオブジェクト Object

(3,5)


Object2

オブジェクト Object

  • ところが、色のデータも持たせたくなった

(3,5)


Object3

オブジェクト Object

  • Point も ColoredPoint も、get_x や move という関数(OO言語ではメソッドと呼ばれる)が使えることにはかわりがない。

  • このf をColoredPointに適用するのは、エラーだろうか?


Object4

オブジェクト Object

  • OO言語:

    • オブジェクト

      • いくつかの(0個以上の)データと、それに対する操作関数(メソッド)から構成される

      • そこに列挙された操作関数以外で内部データをさわることはできない[情報の隠蔽 これが大事]

    • クラス:オブジェクトを生成するための「ひな形」

  • 型理論でOO言語を理解するためには

    • クラス=型、オブジェクト=プログラム(項)

    • オブジェクトは、いくつかのデータおよび関数(これもλ計算では単なるデータ)から構成される。ただし、名前がついている。


3862629

OO言語の型理論

  • レコード型

    • 名前つき、順番のない直積

  • Subtyping


3862629

来週

  • OO言語の型システムの詳細

  • 中間レポートの解説

  • 時間があれば、コントロールオペレータの型理論

    • 名前つき、順番のない直積


  • Login