mlコードによる型推論の例.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mlコードによる型推論の例

Resume 紹介者: 神戸 : A Theory of Type Polymorphism in Programming Robin Milner Journal of Computer and System Science 17, 348-375 1978 概要 歴史 型なし言語 型なしで構造を処理するプログラミング言語。 様々なオブジェクトを処理できる手続きが書ける。 一方、わかりにくいバグを見つけなければならなくなる。 例(LISP):整数アトムにCDRを作用させる。 型付言語 手続きの型指定により上記のようなスタイルは排除される(ALGOL68)。 手続きの型指定が曖昧な言語では上述のような柔軟性を不完全ながら利用可(ALGOL60)。 目的 表 1: 多態(Polymorphism) universal パラメタ付き型(parametric) 包含(inclusion)、継承 adhoc 多重定義(overloading) 型強制(coercion) (この分類はCaradelliWegner[1985]、紹介論文中ではparametricとadhocについてのみ触れていて、型強制は名前の「多重定義」と考えられている。) 主にparametricなpolymorphismを扱う。 上記の型なし言語のような型に関する柔軟性とプログラムの堅牢性の両立。 理論だけでなく実用性もある。 例:MLの型検査の実装 手法 コンパイル時型検査: コンパイル時に型を調べる。 →実行効率のため 型推論: 多くの自明でないプログラムにおいて、全く型を明示しなくても文脈から推論できる。(しかし、ユーザー定義の型をその型の演算と共に定義する場合は除く。) →変数宣言や引数の型を定義するのは別の問題。+型推論は型を明示した型検査と比しても十分簡潔 多態主導: 他では多態手続きの定義に型パラメータを利用するが、ここでは多態な基本演算(代入、関数呼び出し、対や組の作成、リスト処理演算子)を利用して自然に定義する。 基本演算の持つ型制約と変数の宣言/使用からプログラムのフレーズの型を決定。 例: 手続き定義は多態だが、呼び出された際の引数の型と結果の型は文脈から単態に定まる。 以上は命令型言語にも文法的には適用可能だと考えられるし、命令型でない部分言語にも) 概要 MLコードによる型推論の例 例1: map関数 例2: タグつけ 概念の定義 well typing(正しい型付け) Semantic Soundness定理 型付けアルゴリズムの提示 アルゴリズムW Syntactic Soundness定理(アルゴリズムWの正しさを保証する) Wを模倣する改良型アルゴリズムG 代入を扱うためのSemantic Soundness定理の拡張 MLコードによる型推論の例 型についての連立方程式を解くと考える。 例1: map関数 定義 letrec map f,m if null m then nil else cons f hd m , map f, tl m 期待される型 α→β ×α list →β list αとβは型変数 利用されている演算の型の定義 null: α list→bool nil: α list hd: α list→α tl: α list→α list cons: α × α list → α list αは型変数 型の連立方程式 利用している演算の定義から: σnull τ1list→bool σnil τ2list σhd τ3list→τ3 σtl τ4list→τ4list σcons τ5×τ5list →τ5list ここで関数定義から: σmap σt×σm→ρ1 関数mapの仮引数から σnull σm→bool(リスト演算nullの具体化) σhd σm→ρ2(リスト演算hdの具体化) σtl σm→ρ3(リスト演算tlの具体化) σf ρ2→ρ4(関数f) σmap σt×ρ3→ρ5(関数mapの再帰呼び出し) σcons ρ4×ρ5→ρ6(consの具体化) ρ1 σnull ρ6(if文の性質) 以上をRobinsonのUnificationアルゴリズムによって解くと σmap γ→δ ×γlist→δlist が得られる。 mapの具体化 以下のような変数と関数があるとき、 tokl: tok list length: tok→int sqroot: int→real 以下の式に現われる2つのmapは: map sqroot, map length,tokl 以下のように具体化される: tok→int ×tok list →int list

您可能关注的文档

文档评论(0)

cynthia_h + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档