Scheme 修行

letcc なるナニが出てきてます。

$ gosh
gosh> letcc
*** ERROR: unbound variable: letcc
Stack Trace:
_______________________________________
gosh> 

当たり前ですが無い。テキストの 41p に以下なコードが例示されてます。以下なカンジ。

(define intersectall
  (lambda (lset)
    (letcc hop
      (letrec
        ((A (lambda (lset)

scheme な書き方は以下らしい。

(define intersectall
  (lambda (lset)
    (call-with-current-continuation
      (lambda (hop)
        (letrec
          ((A (lambda (lset)

これはマクロで云々、なのかな。おそらくその内 @hanachin_ の中の人がでっち上げるのだろうと思いますが以下かなぁ。

(define-syntax letcc
  (syntax-rules ()
    ((_ arg ...)
     (call-with-current-continuation (lambda (arg) ...)))))

とは言え、Scheme 手習いを再読した方が良いのは間違い無いはず。