SlideShare uma empresa Scribd logo
1 de 10
SICP 二章 2013年 7月
2.1.1-2.1.4
Cons(truct)
(define x (cons 1 2))
car cdr
高階層化可能
(car (cdr z ))
(Car x ) : 1
(Cdr x ) : 2
データ抽象(階層)
四角形の定義
面積、周辺長さの計
算
面積、周辺長さの計
算
幅と高さの計算
四角形の定義
ラムダ計算 非形式的な概説
(wiki)
例えば、ある数に 2 を加える関数 f を考える。これは通常の書き方では
f(x) = x + 2 と書くことができるだろう。この関数 f は、ラムダ計算の式
(ラムダ式という)では λx. x + 2 と書かれる。変数 x の名前は重要では
なく、 λy. y + 2 と書いても同じである。同様に、この関数に 3 を適用し
た結果の数 f(3) は (λx. x + 2) 3 と書かれる。関数の適用は左結合である。
つまり、 f x y = (f x) y である。今度は、引数(関数の入力)に関数をとり
それに 3 を適用する関数を考えてみよう。これはラムダ式では λf. f 3 と
なる。この関数に、先ほど作った 2 を加える関数を適用すると、 (λf. f 3)
(λx. x + 2) となる。ここで、
(λf. f 3) (λx. x + 2) と (λx. x + 2) 3 と 3 + 2
の3つの表現はいずれも同値である。
Church数 (wikipedia)
0 ≡ λf.λx. X
1 ≡ λf.λx. f x
2 ≡ λf.λx. f (f x)
3 ≡ λf.λx. f (f (f x))...
n ≡ λf.λx. fn x...
直感的には、数 n はラムダ式では f という関数
をもらってそれを n 回適用したものを返す関数
である。つまり、チャーチ数は1引数関数を受け
取り、1引数関数を返す高階関数である。
Church数
○n+1
n を受け取って n + 1 を返す関数を定
義することができる。
SUCC := λn f x. f (n f x)
Church数
○掛け算 m*n
MULT := λm n. m (PLUS n) 0
この定義は、 m と n の乗算は、 0 に n を m回
加えることと等しい、ということを利用して
作られている。
MULT := λm n f. m (n f)
問 2.5
(define (print-point p)
(newline)
(display "(")
(display (car p))
(display ",")
(display (cdr p))
(display ")"))
; devide by 2
(define (getcar n)
(getcar-iter n 0))
(define (getcar-iter n a)
(if (= (remainder n 2) 0)
(getcar-iter (/ n 2) (+ a 1))
a))
; devide by 3
(define (getcdr n)
(getcdr-iter n 0))
(define (getcdr-iter n b)
(if (= (remainder n 3) 0)
(getcdr-iter (/ n 3) (+ b 1))
b))
(define (get-num n )
(cons (getcar n) (getcdr n)))
(define p (get-num 9))
(print-point p)
コメント 赤字が追加部分
remainderのサブルーチンは共通化できるが未実施
(0,2)
問 2.6
; n+1
(define (add1 n) (lambda (f) (lambda (x) (f ((n f) x)))))
;0
(define zero (lambda (f) (lambda (x) x)))
; 1= ramuda f x f x
;;;(print "cunning") ; from danboykis.com
;;;(add-1 zero)
;;;(add-1 (lambda (f) (lambda (x) x)))
;;;(lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x))))
;;;(lambda (f) (lambda (x) (f ((lambda (x) x) x))))
;;;(lambda (f) (lambda (x) (f x)))
(define one (lambda (f) (lambda (x) (f x ))))
;2
(define two (lambda (f) (lambda (x) (f(f x)))))
;3
(define three (lambda (f) (lambda (x) (f(f(f x))))))
問 2.6 その2
;m+n
(define (addc m n) (lambda (f) (lambda (x) ((m f) ((n f) x)))))
;;;;;;; verification
(define (inc n) (+ n 1))
(print ((zero inc) 0))
(print ((one inc) 0))
(print ((two inc) 0))
(print ((three inc) 0))
(print (((add1 zero) inc) 0))
(print (((add1 one) inc) 0))
(define (bai n) (* n 2))
(print ((one bai) 1))
(print ((two bai) 1))
(print ((three bai) 1)) ;;;;; Question ;;;;;;;
(print "1+3=")
(print (((addc one three) inc) 0))
;(print (((addc2 one three) inc) 0))
(print (((addc one three) bai) 1)) ;;;;; Question ;;;;;
(print (((addc three three) bai) 1)) ;;;;; Question ;;;;;

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

20130921_曲面の微分幾何学
20130921_曲面の微分幾何学20130921_曲面の微分幾何学
20130921_曲面の微分幾何学
 
python-geohex
python-geohexpython-geohex
python-geohex
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
Ilerpg Study 002
Ilerpg Study 002Ilerpg Study 002
Ilerpg Study 002
 
llvm入門
llvm入門llvm入門
llvm入門
 
CG2013 07
CG2013 07CG2013 07
CG2013 07
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求める
 
プログラミング言語 Julia の紹介
プログラミング言語 Julia の紹介プログラミング言語 Julia の紹介
プログラミング言語 Julia の紹介
 
データとは何か
データとは何かデータとは何か
データとは何か
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
Ilerpg Study 003
Ilerpg Study 003Ilerpg Study 003
Ilerpg Study 003
 
kagamicomput201707
kagamicomput201707kagamicomput201707
kagamicomput201707
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Ninja of Train
Ninja of TrainNinja of Train
Ninja of Train
 
UTPC2012 - K
UTPC2012 - KUTPC2012 - K
UTPC2012 - K
 
Precise garbage collection for c
Precise garbage collection for cPrecise garbage collection for c
Precise garbage collection for c
 
Ilerpg Study 004
Ilerpg Study 004Ilerpg Study 004
Ilerpg Study 004
 
CG2013 06
CG2013 06CG2013 06
CG2013 06
 
動的計画法
動的計画法動的計画法
動的計画法
 

Destaque

Enterprise applications diffusion within organizations: A social learning per...
Enterprise applications diffusion within organizations: A social learning per...Enterprise applications diffusion within organizations: A social learning per...
Enterprise applications diffusion within organizations: A social learning per...Oswaldo Lorenzo
 
Cicadas- Math
Cicadas- MathCicadas- Math
Cicadas- Mathljanita
 
Rakuten Hackathon 2014
Rakuten Hackathon 2014Rakuten Hackathon 2014
Rakuten Hackathon 2014S W
 
Facebook Pages Customizations
Facebook Pages CustomizationsFacebook Pages Customizations
Facebook Pages CustomizationsRahul Singh
 
The smart manager on technology
The smart manager on technologyThe smart manager on technology
The smart manager on technologyOswaldo Lorenzo
 
Study latin
Study latinStudy latin
Study latinS W
 
Maximizing business value from information technology investment
Maximizing business value from information technology investmentMaximizing business value from information technology investment
Maximizing business value from information technology investmentOswaldo Lorenzo
 
Process based management examples of information technology enablers
Process based management examples of information technology enablersProcess based management examples of information technology enablers
Process based management examples of information technology enablersOswaldo Lorenzo
 

Destaque (11)

Grace
GraceGrace
Grace
 
Cultura Digital
Cultura DigitalCultura Digital
Cultura Digital
 
Sia_final2016
Sia_final2016Sia_final2016
Sia_final2016
 
Enterprise applications diffusion within organizations: A social learning per...
Enterprise applications diffusion within organizations: A social learning per...Enterprise applications diffusion within organizations: A social learning per...
Enterprise applications diffusion within organizations: A social learning per...
 
Cicadas- Math
Cicadas- MathCicadas- Math
Cicadas- Math
 
Rakuten Hackathon 2014
Rakuten Hackathon 2014Rakuten Hackathon 2014
Rakuten Hackathon 2014
 
Facebook Pages Customizations
Facebook Pages CustomizationsFacebook Pages Customizations
Facebook Pages Customizations
 
The smart manager on technology
The smart manager on technologyThe smart manager on technology
The smart manager on technology
 
Study latin
Study latinStudy latin
Study latin
 
Maximizing business value from information technology investment
Maximizing business value from information technology investmentMaximizing business value from information technology investment
Maximizing business value from information technology investment
 
Process based management examples of information technology enablers
Process based management examples of information technology enablersProcess based management examples of information technology enablers
Process based management examples of information technology enablers
 

Semelhante a SICP

代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介Masahiro Sakai
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Etsuji Nakai
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical ProgrammingMasahiro Sakai
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPUgos-k
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!vi-iv
 
diffの真髄
diffの真髄diffの真髄
diffの真髄fuku68
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-Hiromasa Ohashi
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 

Semelhante a SICP (20)

代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
Church Numerals
Church NumeralsChurch Numerals
Church Numerals
 
Slide
SlideSlide
Slide
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料
 
表現行列の問題
表現行列の問題表現行列の問題
表現行列の問題
 
表現行列問題
表現行列問題表現行列問題
表現行列問題
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical Programming
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
 
Clean
Clean Clean
Clean
 
Clean
Clean Clean
Clean
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
R intro
R introR intro
R intro
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 

Último

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (8)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

SICP

  • 1. SICP 二章 2013年 7月 2.1.1-2.1.4
  • 2. Cons(truct) (define x (cons 1 2)) car cdr 高階層化可能 (car (cdr z )) (Car x ) : 1 (Cdr x ) : 2
  • 4. ラムダ計算 非形式的な概説 (wiki) 例えば、ある数に 2 を加える関数 f を考える。これは通常の書き方では f(x) = x + 2 と書くことができるだろう。この関数 f は、ラムダ計算の式 (ラムダ式という)では λx. x + 2 と書かれる。変数 x の名前は重要では なく、 λy. y + 2 と書いても同じである。同様に、この関数に 3 を適用し た結果の数 f(3) は (λx. x + 2) 3 と書かれる。関数の適用は左結合である。 つまり、 f x y = (f x) y である。今度は、引数(関数の入力)に関数をとり それに 3 を適用する関数を考えてみよう。これはラムダ式では λf. f 3 と なる。この関数に、先ほど作った 2 を加える関数を適用すると、 (λf. f 3) (λx. x + 2) となる。ここで、 (λf. f 3) (λx. x + 2) と (λx. x + 2) 3 と 3 + 2 の3つの表現はいずれも同値である。
  • 5. Church数 (wikipedia) 0 ≡ λf.λx. X 1 ≡ λf.λx. f x 2 ≡ λf.λx. f (f x) 3 ≡ λf.λx. f (f (f x))... n ≡ λf.λx. fn x... 直感的には、数 n はラムダ式では f という関数 をもらってそれを n 回適用したものを返す関数 である。つまり、チャーチ数は1引数関数を受け 取り、1引数関数を返す高階関数である。
  • 6. Church数 ○n+1 n を受け取って n + 1 を返す関数を定 義することができる。 SUCC := λn f x. f (n f x)
  • 7. Church数 ○掛け算 m*n MULT := λm n. m (PLUS n) 0 この定義は、 m と n の乗算は、 0 に n を m回 加えることと等しい、ということを利用して 作られている。 MULT := λm n f. m (n f)
  • 8. 問 2.5 (define (print-point p) (newline) (display "(") (display (car p)) (display ",") (display (cdr p)) (display ")")) ; devide by 2 (define (getcar n) (getcar-iter n 0)) (define (getcar-iter n a) (if (= (remainder n 2) 0) (getcar-iter (/ n 2) (+ a 1)) a)) ; devide by 3 (define (getcdr n) (getcdr-iter n 0)) (define (getcdr-iter n b) (if (= (remainder n 3) 0) (getcdr-iter (/ n 3) (+ b 1)) b)) (define (get-num n ) (cons (getcar n) (getcdr n))) (define p (get-num 9)) (print-point p) コメント 赤字が追加部分 remainderのサブルーチンは共通化できるが未実施 (0,2)
  • 9. 問 2.6 ; n+1 (define (add1 n) (lambda (f) (lambda (x) (f ((n f) x))))) ;0 (define zero (lambda (f) (lambda (x) x))) ; 1= ramuda f x f x ;;;(print "cunning") ; from danboykis.com ;;;(add-1 zero) ;;;(add-1 (lambda (f) (lambda (x) x))) ;;;(lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x)))) ;;;(lambda (f) (lambda (x) (f ((lambda (x) x) x)))) ;;;(lambda (f) (lambda (x) (f x))) (define one (lambda (f) (lambda (x) (f x )))) ;2 (define two (lambda (f) (lambda (x) (f(f x))))) ;3 (define three (lambda (f) (lambda (x) (f(f(f x))))))
  • 10. 問 2.6 その2 ;m+n (define (addc m n) (lambda (f) (lambda (x) ((m f) ((n f) x))))) ;;;;;;; verification (define (inc n) (+ n 1)) (print ((zero inc) 0)) (print ((one inc) 0)) (print ((two inc) 0)) (print ((three inc) 0)) (print (((add1 zero) inc) 0)) (print (((add1 one) inc) 0)) (define (bai n) (* n 2)) (print ((one bai) 1)) (print ((two bai) 1)) (print ((three bai) 1)) ;;;;; Question ;;;;;;; (print "1+3=") (print (((addc one three) inc) 0)) ;(print (((addc2 one three) inc) 0)) (print (((addc one three) bai) 1)) ;;;;; Question ;;;;; (print (((addc three three) bai) 1)) ;;;;; Question ;;;;;