cl-cont

cl-cont - A Common Lisp Delimited Continuations Library をちょっとさわってみた。
cl-cont は Common Lisp の継続ライブラリ。

(defvar *save*)
(defun p1 () (print 1))
(defun p2 () (print 2))
(defun p3 () (print 3))
(defun f ()
  (with-call/cc
    (let/cc cc
      (ff cc))))
(defun ff (ret)
  (with-call/cc
    (let/cc cc
      (setf *save* cc)
      (funcall ret (p1)))
    (let/cc cc
      (setf *save* cc)
      (funcall ret (p2)))
    (let/cc cc
      (setf *save* cc)
      (funcall ret (p3)))))


CL-USER> (f)

1 ;; print で印字されたもの
1
CL-USER> (funcall *save* 9)

2 ;; print で印字されたもの
2
CL-USER> (funcall *save* 9)

3 ;; print で印字されたもの
3
CL-USER> (funcall *save* 9)
9
CL-USER> (funcall *save* 9)
9