Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Why my DEFMACRO fails?

Name: Anonymous 2012-02-27 10:19


(defmacro call/cc (f)
  (let ((l (gensym))
        (r (gensym))
        (v (gensym)))
   `(let ((,r nil))
      (tagbody (setf ,r (funcall ,f (lambda (,v)
                                   (setf ,r ,v)
                                   (go ,l))))
                ,l)
      ,r)))


It works in some cases but fails on (let ((k nil)) (call/cc (lambda (c) (setf k c))) (print 123) (funcall k nil))

How do I fix it?

Name: Anonymous 2012-02-28 10:34

>>7
Doing it using a tagbody like that won't work as it does something similar, but different from the real call/cc.
Semantically GOTOs work the same way, but ignore a few advanced cases, which crashes SBCL. Dunno why it allows that at all.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List