Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ラムダ計算に基づいた純粋関数型言語の実装~設計と実装~ #TechLunch

ラムダ計算に基づいた純粋関数型言語の実装~設計と実装~ #TechLunch

2011/06/08(水) @ Livesense TechLunch
発表者:塩足 拓也

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.
PRO

April 23, 2014
Tweet

Transcript

  1. ラムダ計算に基づいた純粋関数型 言語の実装 2011/06/08 Takuya Shiotari ~設計と実装~

  2. Agenda  Lambda calculus  Design • Front end UML

    • Back end UML  Implementation • Lexer(Scanner) • Parser • Term • ...
  3. Lambda calculus  基礎数学論の一分野  1930年代にAlonzo ChurchとStephen Cole Kleeneによって考案 

    コンパイラの意味論や型理論で利用  LISP、ML、Haskellなどの関数型プログラミング言語の基礎  1つの変換規則(関数適用)と1つの関数定義規則(ラムダ抽 象)のみを持つ、最小のプログラミング言語  チューリングマシンと等価な数理モデル
  4. 関数の定義と実行を抽象化した計算モデル Lambda calculus <expr> ::= <identifier> | (“λ” <identifier> “.”

    <expr>) | (<expr> <expr>) 変数 ラムダ抽象 関数適用 ラムダ抽象 → 関数定義 f(x) = x 関数適用  → 関数に引数を適用 f(3)
  5. 関数の定義と実行を抽象化した計算モデル Lambda calculus <expr> ::= <identifier> | (“λ” <identifier> “.”

    <expr>) | (<expr> <expr>) 変数 ラムダ抽象 関数適用 ラムダ抽象 → 関数定義 f(x) = x 関数適用  → 関数に引数を適用 f(3)
  6. Lambda calculus 束縛変数(Bound Variable) ラムダ抽象によって束縛(bound)された変数  (λ x . x)のxは自由変数

     (λ x . y)のyは束縛変数  (λ x . (λ y . (x y))) (λ x . y) 自由変数(Free Variable) ラムダ抽象によって束縛(bound)されていない変数 例 FV(x) = {x}, where x is a variable FV(λx.M) = FV(M) \ {x} FV(M N) = FV(M) ∪ FV(N)
  7. Lambda calculus -reduction(evaluation) rule - α-conversion β-reduction 束縛変数は自由変数やその他の束縛変数と重複しないように名前 を書き換える ラムダ計算の式を実行すること

  8. Desigin - front end UML - Lexer Parser Term VariableTerm

    ApplicationTerm Term <create> Core <use> Visitor <use> <use> SymbolTable <use>
  9. Design - back end UML - CodeGenerator Term Core Visitor

    <use> <use> SymbolTable <use> <use>
  10. Implementation ソースコード参照

  11. 次回予告  ラムダ式を用いて自然数を定義(チャーチ数)