@itのgaucheの連載を読んだ

を読んだ。おもしろかった。

A+Bのところをcall/ccを使うとどうなるんだろう?

(define (add/cc-maker message)
  (let ((info (cut print <> message))
        (cont #f))
    (info "A")
    (lambda (x)
      (call/cc (lambda (end)
                 (if cont 
                     (cont x)
                     (print "A + Bは" 
                            (+ x (call/cc (lambda (c) (set! cont c) (info "B") (end)))))))))))


(define add/cc (add/cc-maker "を入力してください")); => Aを入力してください
(add/cc 4); => Bを入力してください
(add/cc 3); => A + Bは7
(add/cc 5); => A + Bは9

上手く入力を促す部分と計算する部分が分離できない><