SICP読書録その3

ex1.12

一応出来た。そもそも、問題がよく分からない部分もある。
この(ex1.12 n)はn段目のPascalの三角形の要素を示している。が、これであってるのかな?

(define (ex1.12 n)
  (define (a list n)
    (cond ((= n 1) list)
	  (else (a (cons 1 (f list)) (- n 1)))))
  (define (f list)
    (cond ((null? (cdr list)) '(1))
	  (else (cons (+ (car list) (car (cdr list)))
		      (f (cdr list))))))
  (a '(1) n))

内部関数の名前は適当。
fはたとえば'(1)から'(1 1)を作り出し、'(1 1)から'(2 1)を作り出し、'(1 2 1)から'(3 3 1)を作り出す。
要はそのリストの先頭に1を入れれば完成。

問題は、これってちゃんとした再帰なのかっていうこと。
Cをやってた頃には自分自身を呼び出せば再帰だろって思ってたけど、状態を保持しているかいないかがその違いなんだろう。
fの内部ではリカーシブだと思うけど、aはそうなってない気がする。

きれいな答えが欲しい。