よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その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つ目のケースにマッチしないと必ずエラーになると思うのだが。