よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その4)
length0_4で使われているlengthは、mk-lengthであっても一向に構わないそうだ。
ということで、今後はこれをlength0_4とする。
(define length0_4 ((lambda (mk-length) ; (*1) (mk-length mk-length)) (lambda (mk-length) ; (*2) (lambda (l) (cond ((null? l) 0) (else (+ 1 (mk-length (cdr l)))))))))
こういうこと。まぁ、名前は何でもいいしね。
ここではmk-lengthが2つ使われているけど、(*1)の行のmk-lengthと(*2)の行でのmk-lengthは違うものだ。...と思う。たぶん。
変数のスコープ的な考え方でいくと、前者と後者では違うスコープだと思うから。
だって違う関数の引数だし。
165ページ最後のRightcolumn氏の発言
All names are equal, but some names are more equal than others.
ってたぶんそんなことを言っているんじゃないかと推測。
しかし、length0_4ってcond式で1つ目のケースにマッチしないと必ずエラーになると思うのだが。