call/cc(call-with-current-continuation)を知った
Scheme修行の14章を今、読んでいます。13章ではじめての構文letccというのが出てきます。letccは処理系で実装されていないことが多いらしく、そのときにはcall/ccというのが使えます。(call-with-current-continuationと省略せずに書くこともできます。)
このcall/cc、使い方はわかったのですが、まだ仕組みが理解できていません。Scheme修行を読み進めるうちにわかってくるでしょう。楽しみです。
(define leftmost (lambda (l) (call/cc (lambda (skip) (letrec ((lm (lambda (l) (cond [(null? l) '()] [(atom? (car l)) (skip (car l))] [else (let () (lm (car l)) (lm (cdr l)))])))) (lm l)))))) (define atom? (lambda (a) (and (not (pair? a)) (not (null? a)))))