最初のページ 戻る 次へ 最後のページ

末端再帰関数にするためには?

(mylength2 '(a b c) 0)

 ⇒ (mylength2 '( b c) 1)

 ⇒ (mylength2 '(c) 2)

 ⇒ (mylength2 '() 3)

 ⇒ 3

引数xの第一要素を除いた部分を新しいxにする

(cdr x)

自分自身を適用する

(mylength2 x n)

(define (mylength2 x n)

 (cond ((null? x) n)

  (else (mylength2 (cdr x) (+ n 1) )) ))

(mylength2 x n)

n [xが空リストのとき]

=

(mylength2 (cdr x) (+ n 1)) [それ以外のとき]