let/cc -> which is better? pasted by DeeEff on Mon Jan 11 00:45:07 2016

;;; VERSION 1 ;;;
(define-syntax let/cc
  (ir-macro-transformer
    (lambda (expr inject compare)
      (let ([escape (cadr expr)]
            [body (cddr expr)])
        `(call/cc (lambda (,(inject escape))
                    ,@(inject body)))))))

(expand '(let/cc k ((lambda (d) (k d)) 1)))
;; (call/cc239 (lambda237 (k236) ((lambda237 (d238) (k236 d238)) 1)))

;;; VERSION 2 ;;;
(define-syntax let/cc
  (ir-macro-transformer
    (lambda (expr inject compare)
      (let ([escape (cadr expr)]
            [body (cddr expr)])
        `(call/cc (lambda (,escape) ,@body))))))

(expand '(let/cc k ((lambda (d) (k d)) 1)))
;; (call/cc253 (lambda251 (k) ((lambda (d) (k d)) 1)))

Counter-example added by sjamaan on Mon Jan 11 19:16:12 2016

;; This should be identical to (print 1)
;; It simply ignores the continuation
(let ((lambda print))
  (let/cc k (lambda 1)))