call/ccとdefine

前回書いたコルーチン定義用マクロdefine-coroutineの中に、以下のようなコードがあった。

(define routine
  (lambda ()
    (call/cc (lambda (return)
               (define yield
                 (lambda ()
                   (call/cc (lambda (cont)
                              (enqueue! *tasks* cont)
                              (return)))))
               body ...))
    ((dequeue! *tasks*))))

(return)してcall/ccから出たらlambdaあって、その次はdefine。え?またdefineするのか?...つまり(lambda () (call/cc (return) ... ))に再度名前routineが与えられるのか?

とか疑問に思いつつ今日のこの日記を書いてたら、自己解決。自己解決に至った経緯を書こうとしたけど、書いては消し書いては消し。うまく説明できない。

未だにλ抽象と関数適用を混同してしまう程度の能力。あと、defineを疑問に思ったんなら、なぜlambdaも疑問に思えなかったのか。
やっぱり僕の頭は論理的じゃないなぁ。