1.2 手続きとその生成するプロセス その1

  • 問題1.9
;; (a)
(define (+ a b)
  (if (= a 0)
      b
      (inc (+ (dec a) b))))

;; (b)
(define (+ a b)
  (if (= a 0)
      b
      (+ (dec a) (inc b))))

a = 3, b = 2 としたときに

;; (a)
(+ 3 2)
(inc (+ 2 2))
(inc (inc (+ 1 2)))
(inc (inc (inc (+ 0 2))))
(inc (inc (inc 2)))
(inc (inc 3))
(inc 4)
5

;; (b)
(+ 3 2)
(+ 2 3)
(+ 1 4)
(+ 0 5)
5

となるから、(a)は再帰的プロセス、(b)は反復的プロセス

  • 問題1.10

は、ちょっととばします。

  • 問題1.11
;;再帰的
(define (f-recur n)
  (cond
   ((< n 3) n)
   (else (+ (f-recur (- n 1))(* 2 (f-recur (- n 2)))(* 3 (f-recur (- n 3)))))))

;;反復的
(define (f-iter p1 p2 p3 counter max)
  (cond
   ((< max 3) max)
   ((> counter max) p3)
   (else (f-iter p2 p3 (+ (* 3 p1) (* 2 p2) p3) (+ counter 1) max))))

(define (f n)
  (f-iter 0 1 2 3 n))

以前読んだときは、反復的プロセスがぴんとこなかった記憶があるのだが、今回は結構すんなり理解できた気がする。
結局、反復的プロセスは状態を明示的に受け渡しながらプロセスを実行していくって理解でいいのかな?