Submit Search
Introduction to lambda calculation
Download as PPTX, PDF
0 likes
80 views
R
relipmoc101
新入生向けに作った、ラムダ計算の簡単な紹介スライドです。 twitter @elipmoc101
Engineering
Read more
1 of 38
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
More Related Content
PDF
C言語講習会1
odenhadengaku
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
和弘 井之上
PDF
C言語講習会2
odenhadengaku
PDF
C言語講習会4
odenhadengaku
PDF
C言語講習会3
odenhadengaku
PPTX
C++ tips 3 カンマ演算子編
道化師 堂華
PDF
C++ tips2 インクリメント編
道化師 堂華
PPTX
第3章 型とクラス
Yasuaki Takebe
C言語講習会1
odenhadengaku
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
和弘 井之上
C言語講習会2
odenhadengaku
C言語講習会4
odenhadengaku
C言語講習会3
odenhadengaku
C++ tips 3 カンマ演算子編
道化師 堂華
C++ tips2 インクリメント編
道化師 堂華
第3章 型とクラス
Yasuaki Takebe
What's hot
(20)
PPTX
C++ tips4 cv修飾編
道化師 堂華
PPTX
第3章 型とクラス
Yasuaki Takebe
PPTX
定理証明言語によるハードウェア検証
Shunji Nishimura
PPTX
C++ tips1 #include編
道化師 堂華
PPTX
Yokohama6 epi
えぴ 福田
PDF
[Basic 10] 形式言語 / 字句解析
Yuto Takei
PDF
C#勉強会
hakugakucafe
PDF
やさしく知りたいC言語
uru nru
PDF
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
PDF
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
Yuto Takei
PPTX
Rのコードをキレイに見せたい
mangantempy
PDF
F#によるFunctional Programming入門
bleis tift
PDF
たのしい関数型
Shinichi Kozake
PDF
.NET系開発者から見たJava
bleis tift
PPT
オブジェクト指向入門7
Kenta Hattori
PPT
言語処理系入門7
Kenta Hattori
PDF
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
PDF
TypeScript & 関数型講座 第3回 関数型入門
gypsygypsy
PDF
現実(えくせる)と戦う話
bleis tift
PDF
D言語にまだ入っていない新機能 (Dの日#2)
tom-tan
C++ tips4 cv修飾編
道化師 堂華
第3章 型とクラス
Yasuaki Takebe
定理証明言語によるハードウェア検証
Shunji Nishimura
C++ tips1 #include編
道化師 堂華
Yokohama6 epi
えぴ 福田
[Basic 10] 形式言語 / 字句解析
Yuto Takei
C#勉強会
hakugakucafe
やさしく知りたいC言語
uru nru
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
Yuto Takei
Rのコードをキレイに見せたい
mangantempy
F#によるFunctional Programming入門
bleis tift
たのしい関数型
Shinichi Kozake
.NET系開発者から見たJava
bleis tift
オブジェクト指向入門7
Kenta Hattori
言語処理系入門7
Kenta Hattori
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
TypeScript & 関数型講座 第3回 関数型入門
gypsygypsy
現実(えくせる)と戦う話
bleis tift
D言語にまだ入っていない新機能 (Dの日#2)
tom-tan
Ad
Similar to Introduction to lambda calculation
(20)
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
和弘 井之上
PDF
Java8 lambdas chapter1_2
yo0824
PDF
名前重要 超重要
baban ba-n
PPTX
Visual C++で使えるC++11
nekko1119
PPTX
Java8から始める関数型プログラミング
stylefreeslide
PDF
プログラマ講習第2回
Yuma Yoshimoto
ODP
Haskell
todorokit
PDF
初心者向けGo言語勉強会
leverages_event
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
PDF
[Basic 12] 関数型言語 / 型理論
Yuto Takei
PDF
PHP 入門
Shuhei Iitsuka
PDF
関数型志向Python - LLまつり2013
Esehara Shigeo
PDF
普通のプログラミング言語R
Shuyo Nakatani
PPTX
Matlab講習2021
Tomoya Kamimura
PDF
MP in Scala
Kent Ohashi
PDF
TypeScript 1.0 オーバービュー
Akira Inoue
PPT
Scala on Hadoop
Shinji Tanaka
PDF
Haxeについて
Moriyoshi Koizumi
PDF
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
PPTX
Project lambda
Appresso Engineering Team
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
和弘 井之上
Java8 lambdas chapter1_2
yo0824
名前重要 超重要
baban ba-n
Visual C++で使えるC++11
nekko1119
Java8から始める関数型プログラミング
stylefreeslide
プログラマ講習第2回
Yuma Yoshimoto
Haskell
todorokit
初心者向けGo言語勉強会
leverages_event
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
[Basic 12] 関数型言語 / 型理論
Yuto Takei
PHP 入門
Shuhei Iitsuka
関数型志向Python - LLまつり2013
Esehara Shigeo
普通のプログラミング言語R
Shuyo Nakatani
Matlab講習2021
Tomoya Kamimura
MP in Scala
Kent Ohashi
TypeScript 1.0 オーバービュー
Akira Inoue
Scala on Hadoop
Shinji Tanaka
Haxeについて
Moriyoshi Koizumi
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
Project lambda
Appresso Engineering Team
Ad
Introduction to lambda calculation
1.
Introduction to lambda calculation by
elipmoc
2.
ラムダ計算入門 らいパン粉
3.
ところで、ラムダ式って 知ってる?
4.
ラムダ式とは プログラミング言語で関数を第一級オブジェクト(first-class object)として扱えるようにするために、 関数を式として生成できる言語機能である。 生成された式はクロージャなどと呼ばれる。
5.
何を言ってるかさっぱりわか らん・・・・・
6.
関数を変数に保存できるって 知ってる?
7.
C言語 void plus(int a,
int b){ printf( "a+b=%d" , a+b ); } int main(){ void(*hoge)(int,int); //変数宣言(関数ポインタ) hoge = plus; hoge(4, 5); }
8.
JavaScript function plus(a, b){ alert(
a+b ); } var hoge=plus; hoge(4, 5);
9.
JavaScript(ラムダ式) var hoge=(a,b)=>alert(a+b); hoge(4, 5);
10.
べつにラムダ式を紹介したか ったわけではない
11.
じゃあなぜラムダ式を紹介したのか? ラムダ式はラムダ計算のアイデアから生 まれたものだから(小並感)
12.
ラムダ計算文法1(C言語で比較) int hoge(int x){ return
x+4; } λx.x+4
13.
ラムダ計算文法1(JavaScriptで比較) function hoge(x){ return x+4; } λx.x+4
14.
ラムダ計算文法2(C言語で比較) int plus(int x,int y){ return
x+y; } λx.λy.x+y
15.
ラムダ計算文法2(JavaScriptで比較) function plus(x,y){ return x+y; } λx.λy.x+y
16.
ラムダ計算文法分解1 λx.x+4 関数の引数 式
17.
ラムダ計算文法分解2 λx.λy.x+y 関数の引数 式 えっ!?λyも関数の引数じゃないのか?
18.
β簡約 β簡約とは、記号の置き換え操作。 プログラミング的に言うと、関数に引数を渡して呼び出すこ とを言う。 もっと意識高く言うと、 関数適応(Function application) (λx.x+4) 8
を例にしてやってみる
19.
β簡約 (λx.x+4) 8 λx.x+4に8を適応する ↓ 8+4
xが8に置き換えられ る ↓ 12 +演算子が一般的なも のと同じと考えるとこう
20.
β簡約分解 (λx.x+4) 8 式 適応する式 なんらかの式に式を適応する操作である
21.
ラムダ計算の形式的な文法定義 e(式) := x
(変数) | λx.e (関数) | e e (関数適応)
22.
β簡約2 (λx.λy.x+y) 4 5
→ (λx.λy.x+y) 4 5 → (λy.4+y) 5 (λy.4+y) 5 → 4+5 → 9 必ず、引数はひとつひとつ適応される。 関数が関数を式として返しているという点に注目
23.
カリー化 このように、関数に引数を一つ渡し、返ってきた関数に二個 目の引数を渡しさらに返ってきた(略) という風に引数を渡す事を、数学者ハスケル・カリーのカリ ーを取って、カリー化という。 ちなみにハスケルもプログラミング言語Ha(略)
24.
本当のラムダ計算 今まで、+演算子を例に使っていたが、そもそ もラムダ計算には+なんてない。 あるのは、λと.と任意の識別子(変数)だけである。
25.
ラムダ計算はチューリング完全 しかし、ラムダ計算はプログラミング言 語と同様の計算能力を保持している。 純粋なラムダ計算だけで足し算ができる ことを示そう。
26.
チャーチ数(ペアノの公理) 0=λf.λx.x 1=λf.λx.f x 2=λf.λx.f (f
x) 3=λf.λx.f (f (f x)) 4=λf.λx.f (f (f (f x))) n=λf.λx.f (...(f x)...) (n>0) このようにfを何回適応したかで数を数えるよう に決める
27.
足し算関数の定義 Plus = λm.λn.λf.λx.
m f (n f x) は?
28.
1+2をしてみよう Plus 1 2
29.
1+2をしてみよう Plus = λm.λn.λf.λx.
m f (n f x)なので Plus 1 2 → (λm.λn.λf.λx. m f (n f x)) 1 2
30.
1+2をしてみよう 1をmに適応する (λm.λn.λf.λx. m f
(n f x)) 1 2 →(λn.λf.λx.1 f (n f x)) 2
31.
1+2をしてみよう 2をnに適応する (λn.λf.λx.1 f (n
f x)) 2 →λf.λx.1 f (2 f x)
32.
1+2をしてみよう 1=λf.λx.f x 2=λf.λx.f (f
x)なので λf.λx.1 f (2 f x) →λf.λx.(λf.λx.f x) f ((λf.λx.f (f x)) f x)
33.
1+2をしてみよう さらに適応して整理する λf.λx.(λf.λx.f x) f
((λf.λx.f (f x)) f x) →λf.λx.(λx.f x) ((λf.λx.f (f x)) f x) →λf.λx.f ((λf.λx.f (f x)) f x)
34.
1+2をしてみよう さらに適応して整理する2 λf.λx.f ((λf.λx.f (f
x)) f x) →λf.λx.f ((λx.f (f x)) x) →λf.λx.f ((λx.f (f x)) x) →λf.λx.f (f (f x))
35.
1+2をしてみよう Plus 1 2
→ λf.λx.f (f (f x)) → 3
36.
チャーチ数の考え方 λf.λx.f (f (f
x)) → 3 ピンとこない。なんでこれで3なん だ・・・
37.
チャーチ数の考え方 例 fを1+、xを0に置き換えると・・・ λf.λx.f (f
(f x)) 1+ 0 →λx.1+(1+(1+x)) 0 →1+(1+(1+0)) → 3 ね?数を表現できてるでしょ?
38.
まとめ ・ラムダ計算はシンプルな文法のプログラミング言語 ・ラムダ計算は現在のプログラミング言語の発展に貢 献している ・ラムダ計算は奥が深い ・Haskellは素晴らしい言語
Download