slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
新しい再帰呼び出しの形式 PowerPoint Presentation
Download Presentation
新しい再帰呼び出しの形式

Loading in 2 Seconds...

play fullscreen
1 / 24

新しい再帰呼び出しの形式 - PowerPoint PPT Presentation


  • 95 Views
  • Uploaded on

新しい再帰呼び出しの形式. Accumulator( 集積変数)を用いた再帰. 例:中間結果を保持して計算する. 相対距離から絶対距離. (50 40 70 30 30)から (50 90 160 190 220)を計算する. 相対距離. 0. 50. 40. 7 0. 30. 30. 絶対距離. 0. 50. 90. 160. 190. 220. relative-2-absolute. ;; relative-2-absolute : ;; (listof number) -> (listof number)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '新しい再帰呼び出しの形式' - maja


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
新しい再帰呼び出しの形式
  • Accumulator(集積変数)を用いた再帰
slide2
例:中間結果を保持して計算する

相対距離から絶対距離

(50 40 70 30 30)から (50 90 160 190 220)を計算する

相対距離

50

40

70

30

30

絶対距離

50

90

160

190

220

relative 2 absolute
relative-2-absolute

;; relative-2-absolute :

;; (listof number) -> (listof number)

;; 相対的距離を示す値のリストから

;; 絶対的距離を示す値のリストに変換する

;; リストの最初の要素は原点からの距離

relative 2 absolute1
relative-2-absolute

(define (relative-2-absolute alon)

(cond

[(empty? alon) empty]

[else (cons (first alon)

(add-to-each

(first alon)

(relative-2-absolute (rest alon))))]))

add to each
add-to-each

;; add-to-each : number (listof number) -> (listof number)

;; リストalonの各要素に数nを加える

(define (add-to-each n alon)

(cond

[(empty? alon) empty]

[else (cons (+ (first alon) n)

(add-to-each n (rest alon)))]))

relative 2 absolute2
relative-2-absoluteの性能評価
  • (define x (relative-2-absolute (list 0 ... N)))

評価にかかる時間がNに比例しない.それ以上にかかる!

slide7
計算のトレース
  • 3,5,2,1,6
  • 1,7
  • 2,3,9
  • 5,7,8,14
  • 3,8,10,11,17
  • Nの2乗に比例した計算(加算とcons)が必要
slide8
問題点
  • これまでの値を記憶していない
  • 一つ前の値しかわからない
slide9
改良
  • 3,5,2,1,6
  • 3+5=8
  • 8+2=10
  • 10+1=11
  • 11+6=17
  • これをあわせて,
  • 3,8,10,11,17
rel 2 abs alon accu dist
rel-2-abs alon accu-dist

(define (rel-2-abs alon accu-dist)

(cond

[(empty? alon) empty]

[else (cons (+ (first alon) accu-dist)

(rel-2-abs (rest alon)

(+ (first alon) accu-dist)))]))

Accumulator(集積変数)

slide11
計算のトレース
  • = (rel-2-abs (list 3 2 7) 0)
  • = (cons 3 (rel-2-abs (list 2 7) 3))
  • = (cons 3 (cons 5 (rel-2-abs (list 7) 5)))
  • = (cons 3 (cons 5 (cons 12 (rel-2-abs empty 12))))
  • = (cons 3 (cons 5 (cons 12 empty)))
slide12
完成したプログラム

;; relative-2-absolute2 : (listof number) -> (listof number)

;; 相対的距離を示す値のリストから

;; 絶対的距離を示す値のリストに変換する

;; リストの最初の要素は原点からの距離

(define (relative-2-absolute2 alon)

(define (rel-2-abs alon accu-dist)

(cond

[(empty? alon) empty]

[else (cons (+ (first alon) accu-dist)

(rel-2-abs (rest alon) (+ (first alon) accu-dist)))]))

(rel-2-abs alon 0))

reverse
Reverse

;; reverse : (listof X) -> (listof X)

;; to construct the reverse of alox

(define (reverse alox)

(cond

[(empty? alox) empty]

[else (make-last-item

(reverse (rest alox))(first alox))]))

リストの要素が逆転した新たなリストを作る

make last item
make-last-item

;; make-last-item : (listof X) X -> (listof X)

;;要素 an-x をリスト alox の最後につける

(define (make-last-item alox an-x)

(cond

[(empty? alox) (list an-x)]

[else (cons (first alox)

(make-last-item (rest alox)an-x))]))

reverse1
Reverseの問題点
  • 再帰を2重に(reverse とmake-last-item) 行っている
    • (1 2 3 4 5 6)のreverse
      • ()
      • (6) ; (make-last-item () 6)
      • (6 5) ; (make-last-item (6) 5)
      • (6 5 4) ; (make-last-item (6 5) 4)
      • (6 5 3 2) …
      • (6 5 3 2 1)
accumulator reverse
Accumulatorを用いたreverse
  • (1 2 3 4 5 6)のreverse
  • ()
  • (1)
  • (2 1)
  • (3 2 1)
  • (4 3 2 1)
  • (5 4 3 2 1)
  • (6 5 4 3 2 1)
reverse2
reverse

; reverse : (listof X) -> (listof X)

;; to construct the reverse of alox

(define (reverse alox0)

;; accumulator is the reversed list of all those items

;; on alox0 that precede alox

(define (rev alox accumulator)

(cond

[(empty? alox) ...]

[else

... (rev (rest alox) ....... )

... ]))

(rev alox0 ...))

acc reverse
ACCを用いたreverse  ー 完成版

;; reverse : (listof X) -> (listof X)

;; to construct the reverse of alox

(define (reverse alox0)

;; accumulator is the reversed list of all those items

;; on alox0 that precede alox

(define (rev alox accumulator)

(cond

[(empty? alox) accumulator]

[else

(rev (rest alox) (cons (first alox) accumulator))]))

(rev alox0 empty))

accumulator
Accumulatorを用いた再帰に変換

;; sum : (listof number) -> number

;; to compute the sum of the numbers on alon

(define (sum alon)

(cond

[(empty? alon) 0]

[else (+ (first alon) (sum (rest alon)))]))

acc sum
ACCを用いたsum

;; sum : (listof number) -> number

;; to compute the sum of the numbers on alon0

(define (sum alon)

(define (sum-a alon accumulator)

(cond

[(empty? alon) accumulator]

[else (sum-a (rest alon) (+ (first alon) accumulator))]))

(sum-a alon 0))

slide21
計算のトレース:通常の再帰
  • (sum (list 10.23 4.50 5.27))
  • = (+ 10.23 (sum (list 4.50 5.27)))
  • = (+ 10.23 (+ 4.50 (sum (list 5.27))))
  • = (+ 10.23 (+ 4.50 (+ 5.27 (sum empty))))
  • = (+ 10.23 (+ 4.50 (+ 5.27 0)))
  • = (+ 10.23 (+ 4.50 5.27))
  • = (+ 10.23 9.77)
  • = 20.0
slide22
計算のトレース:ACCを用いた再帰
  • (sum (list 10.23 4.50 5.27))
  • = (sum-a (list 10.23 4.50 5.27) 0)
  • = (sum-a (list 4.50 5.27) 10.23)
  • = (sum-a (list 5.27) 14.73)
  • = (sum-a empty 20.0)
  • = 20.0
slide23
期末試験等
  • 11月14日:演習のみ
    • 課題の最終締め切りは11月22日(木)
  • 11月21日:期末試験
    • 3C113 8:40〜11:10
    • プログラミングの問題
      • これまでの課題と同じ方法で提出
slide24
期末試験:注意事項
  • 問題は紙で配布
  • 個人のノートPCは、使わないこと
  • 試験中に実行して良いソフトゥエア
    • DrRacket, エディタ, メール送受信のためのソフトウェア
  • ネットワークの使用は、解答の送受信に限る
    • ウェブの閲覧は禁止(ウェブメールを除く)等