Welcome to DrRacket, version 8.11 [cs]. Language: racket, with debugging; memory limit: 128 MB. > (eval-one-exp '(+ 3 (call/cc (lambda (k) (+ 4 (k 5) 6))) 7)) >(eval-expression-cps '(app-exp ((var-exp +) (lit-exp 3) (call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7))) '(halt-cont) '(((+) . #((primitive +))))) >(eval-expressions-cps '((var-exp +) (lit-exp 3) (call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) '(proc-cont (halt-cont)) '(((+) . #((primitive +))))) >(eval-expression-cps '(var-exp +) '(eval-exps-cont ((lit-exp 3) (call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) (proc-cont (halt-cont)) (((+) . #((primitive +))))) '(((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont ((lit-exp 3) (call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) (proc-cont (halt-cont)) (((+) . #((primitive +))))) '(primitive +)) >(eval-expressions-cps '((lit-exp 3) (call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) '(cons-cont (primitive +) (proc-cont (halt-cont))) '(((+) . #((primitive +))))) >(eval-expression-cps '(lit-exp 3) '(eval-exps-cont ((call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) (cons-cont (primitive +) (proc-cont (halt-cont))) (((+) . #((primitive +))))) '(((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont ((call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) (cons-cont (primitive +) (proc-cont (halt-cont))) (((+) . #((primitive +))))) 3) >(eval-expressions-cps '((call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) (lit-exp 7)) '(cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) '(((+) . #((primitive +))))) >(eval-expression-cps '(call/cc-exp (lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))))) '(eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))) '(((+) . #((primitive +))))) >(eval-expression-cps '(lambda-exp (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)))) '(call/cc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) '(((+) . #((primitive +))))) >(apply-cont '(call/cc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) '(closure (k) (app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))) (((+) . #((primitive +)))))) >(eval-expression-cps '(app-exp ((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6))) '(eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expressions-cps '((var-exp +) (lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) '(proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expression-cps '(var-exp +) '(eval-exps-cont ((lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont ((lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(primitive +)) >(eval-expressions-cps '((lit-exp 4) (app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) '(cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expression-cps '(lit-exp 4) '(eval-exps-cont ((app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont ((app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) 4) >(eval-expressions-cps '((app-exp ((var-exp k) (lit-exp 5))) (lit-exp 6)) '(cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expression-cps '(app-exp ((var-exp k) (lit-exp 5))) '(eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expressions-cps '((var-exp k) (lit-exp 5)) '(proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expression-cps '(var-exp k) '(eval-exps-cont ((lit-exp 5)) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont ((lit-exp 5)) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))))) >(eval-expressions-cps '((lit-exp 5)) '(cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(eval-expression-cps '(lit-exp 5) '(eval-exps-cont () (cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont () (cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) 5) >(eval-expressions-cps '() '(cons-cont 5 (cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))))) '(((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))) >(apply-cont '(cons-cont 5 (cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))))) '()) >(apply-cont '(cons-cont (acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) (proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +))))))) '(5)) >(apply-cont '(proc-cont (eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))) '((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) 5)) >(apply-procedure '(acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))) '(5) '(eval-exps-cont ((lit-exp 6)) (cons-cont 4 (cons-cont (primitive +) (proc-cont (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) (((k) . #((acontinuation (eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +)))))))) ((+) . #((primitive +)))))) >(apply-cont '(eval-exps-cont ((lit-exp 7)) (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) (((+) . #((primitive +))))) 5) >(eval-expressions-cps '((lit-exp 7)) '(cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont))))) '(((+) . #((primitive +))))) >(eval-expression-cps '(lit-exp 7) '(eval-exps-cont () (cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont))))) (((+) . #((primitive +))))) '(((+) . #((primitive +))))) >(apply-cont '(eval-exps-cont () (cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont))))) (((+) . #((primitive +))))) 7) >(eval-expressions-cps '() '(cons-cont 7 (cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))))) '(((+) . #((primitive +))))) >(apply-cont '(cons-cont 7 (cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))))) '()) >(apply-cont '(cons-cont 5 (cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont))))) '(7)) >(apply-cont '(cons-cont 3 (cons-cont (primitive +) (proc-cont (halt-cont)))) '(5 7)) >(apply-cont '(cons-cont (primitive +) (proc-cont (halt-cont))) '(3 5 7)) >(apply-cont '(proc-cont (halt-cont)) '((primitive +) 3 5 7)) >(apply-procedure '(primitive +) '(3 5 7) '(halt-cont)) > (apply-prim-proc '+ '(3 5 7)) < 15 >(apply-cont '(halt-cont) 15) <15 15 >