by shigemk2

当面は技術的なことしか書かない

SICP(計算機プログラムの構造と解釈 第二版)を読む会 #yomukai

1.3 高階手続きによる抽象

gosh> (define (cube x) (* x x x))
cube
gosh> (cube 3)
27

強力なプログラム言語への要請の一つは, よくあるパターンに名前をつけて抽象化し, その抽象を直接使って仕事をする能力である

手続きを引数としてとり, 手続きを値として返す手続きが構成→高階手続き

1.3.1 引数としての手続き

(define (sum-integers a b)
  (if (> a b)
      0
      (+ a (sum-integers (+ a 1) b))))
sum-integers
gosh> (sum-integers 1 2)
3
gosh> (sum-integers 1 40)
820
gosh> (sum-integers 1 10)
55

級数の総和

f:id:shigemk2:20150609222516p:plain

1.3.2 lambdaを使う手続きの構築

letとかlambdaとかを使う。

(define (f x y)
  (define (f-helper a b)
    (+ (* x (square a))
       (* y b)
       (* a b)))
  (f-helper (+ 1 (* x y)) 
            (- 1 y)))

が、

(define (f x y)
  ((lambda (a b)
     (+ (* x (square a))
        (* y b)
        (* a b)))
   (+ 1 (* x y))
   (- 1 y)))

になり、さらに

(define (f x y)
  (let ((a (+ 1 (* x y)))
        (b (- 1 y)))
    (+ (* x (square a))
       (* y b)
       (* a b))))

となる。

1.3.3 一般的方法としての手続き

  • 区間二分法
  • 不動点
  • 平均緩和法

1.3.4 値として返される手続き

  • Newton 法

計算機プログラムの構造と解釈[第2版]

計算機プログラムの構造と解釈[第2版]

  • 作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・ジェイサスマン,Harold Abelson,Julie Sussman,Gerald Jay Sussman,和田英一
  • 出版社/メーカー: 翔泳社
  • 発売日: 2014/05/17
  • メディア: 大型本
  • この商品を含むブログ (2件) を見る