Skip to content

Instantly share code, notes, and snippets.

@Michaelgathara
Created August 23, 2023 07:38
Show Gist options
  • Save Michaelgathara/91c36c6f36618332627ea38ac14d39c1 to your computer and use it in GitHub Desktop.
Save Michaelgathara/91c36c6f36618332627ea38ac14d39c1 to your computer and use it in GitHub Desktop.
#lang racket
(define (call num1 num2)
(let ([x num1] [y num2]) x))
(define (brouhaha_main)
(call 5 42))
'((define (call num1 num2)
(let ([x num1] [y num2]) x))
(define (brouhaha_main)
(call '5 '42)))
'((define (call num1 num2)
(let ([x num1] [y num2]) x))
(define (brouhaha_main)
(call '5 '42)))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call num1 num2)
(let (prov
[let
((x num1) (y num2))
x])
((x num1) (y num2))
x))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main)
(app (prov (call '5 '42)) call (app (prov '5) quote 5) (app (prov '42) quote 42))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call num1 num2)
(let (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main)
(let (prov
[let
((a2349 5))
(let ([a2350 (app (prov '5) quote a2349)])
(let ([a2351 42])
(let ([a2352 (app (prov '42) quote a2351)])
(app (prov (call '5 '42)) call a2350 a2352))))])
((x2353 (let ([a2349 5])
(let ([a2350 (app (prov '5) quote a2349)])
(let ([a2351 42])
(let ([a2352 (app (prov '42) quote a2351)])
(app (prov (call '5 '42)) call a2350 a2352)))))))
x2353)))
'((define (call kont2354 num1 num2)
(let kont2354 (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (brouhaha_main kont2355)
(let kont2355 (prov
[let
((a2349 5))
(let ([a2350 (app (prov '5) quote a2349)])
(let ([a2351 42])
(let ([a2352 (app (prov '42) quote a2351)])
(app (prov (call '5 '42)) call a2350 a2352))))])
((x2353 (let ([a2349 5])
(let ([a2350 (app (prov '5) quote a2349)])
(let ([a2351 42])
(let ([a2352 (app (prov '42) quote a2351)])
(app (prov (call '5 '42)) call a2350 a2352)))))))
x2353)))
'((define (call kont2318 num1 num2)
(let ([f23202322 (lambda (x23142323)
(let ([f23192324 (lambda (y23152325) (kont2318 x23142323))])
(f23192324 num2)))])
(f23202322 num1)))
(define (brouhaha_main kont2321)
(let ([a23162326 '5]) (let ([a23172327 '42]) (call kont2321 a23162326 a23172327)))))
'((define (call kont2349 num1 num2)
(let kont2349 (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (brouhaha_main kont2350)
(let kont2350 (prov
[let
((a2346 '5))
(let ([a2347 '42]) (app (prov (call '5 '42)) call a2346 a2347))])
((x2348 (let ([a2346 '5]) (let ([a2347 '42]) (app (prov (call '5 '42)) call a2346 a2347)))))
x2348)))
'((proc (call _2351 kont2349 num1 num2)
(clo-app let
kont2349
(prov (let ([x num1] [y num2]) x))
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(proc (brouhaha_main _2352 kont2350)
(clo-app
let
kont2350
(prov (let ([a2346 '5]) (let ([a2347 '42]) (app (prov (call '5 '42)) call a2346 a2347))))
((x2348 (let ([a2346 '5]) (let ([a2347 '42]) (app (prov (call '5 '42)) call a2346 a2347)))))
x2348)))
; desugar, alphatize, add-tags
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call num1 num2)
(let (prov
[let
((x num1) (y num2))
x])
((x num1) (y num2))
x))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main)
(app (prov (call '5 '42)) call '5 '42)))
; anf-convert
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call num1 num2)
(let (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main)
(let ([x2348 (let ([a2346 '5]) (let ([a2347 '42]) (app (prov (call '5 '42)) call a2346 a2347)))])
x2348)))
'((define (call num1 num2)
(let ([x2314 num1]) (let ([y2315 num2]) x2314)))
(define (brouhaha_main)
(let ([a2316 '5]) (let ([a2317 '42]) (call a2316 a2317)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call num1 num2)
(let (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main)
(let (prov
[let
((a2344 '5))
(let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345))])
((xy2346 (let ([a2344 '5]) (let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345)))))
xy2346)))
'((define (call kont2347 num1 num2)
(let kont2347 (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (brouhaha_main kont2348)
(let kont2348 (prov
[let
((a2344 '5))
(let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345))])
((xy2346 (let ([a2344 '5]) (let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345)))))
xy2346)))
'((define (call kont2347 num1 num2)
(let kont2347 (prov
[let
((x num1) (y num2))
x])
((x num1))
(let (prov
[let
((x num1) (y num2))
x])
((y num2))
x)))
(define (brouhaha_main kont2348)
(let kont2348 (prov
[let
((a2344 '5))
(let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345))])
((xy2346 (let ([a2344 '5]) (let ([a2345 '42]) (app (prov (call '5 '42)) call a2344 a2345)))))
xy2346)))
after
cps:
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2345 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2))])
((f2347 (lambda (x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2)))))
(f2347 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2348)
(let (prov '5)
((a2343 '5))
(let (prov '42)
((a2344 '42))
(app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2345 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2))])
((f2347 (lambda (x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2)))))
(f2347 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2348)
(let (prov '5)
((a2343 '5))
(let (prov '42)
((a2344 '42))
(app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((proc (call _2351 kont2347 num1 num2)
(clo-app let
(prov (lambda (x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2))))
((f2349 (lambda (x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2)))))
(f2349 num1)))
(proc (brouhaha_main _2352 kont2350)
(clo-app let
(prov '5)
((a2345 '5))
(let (prov '42)
((a2346 '42))
(app (prov (call '5 '42)) call kont2350 a2345 a2346)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2347 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2))])
((f2349 (lambda (x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2)))))
(f2349 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2350)
(let (prov '5)
((a2345 '5))
(let (prov '42)
((a2346 '42))
(app (prov (call '5 '42)) call kont2350 a2345 a2346)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2347 num1 num2)
(let (prov num1)
((f2349 (lambda (x)
(let (prov num2)
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2)))))
(f2349 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2350)
(let (prov '5)
((a2345 '5))
(let (prov '42)
((a2346 '42))
(app (prov (call '5 '42)) call kont2350 a2345 a2346)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2347 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2))])
((f2349 (lambda (x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2)))))
(f2349 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2350)
(let (prov '5)
((a2345 '5))
(let (prov '42)
((a2346 '42))
(app (prov (call '5 '42)) call kont2350 a2345 a2346)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2347 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2))])
((f2349 (lambda (x)
(let (prov
[lambda
(y)
(kont2347 x)])
((f2348 (lambda (y) (kont2347 x))))
(f2348 num2)))))
(f2349 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2350)
(let (prov '5)
((a2345 '5))
(let (prov '42)
((a2346 '42))
(app (prov (call '5 '42)) call kont2350 a2345 a2346)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2345 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2))])
((f2347 (lambda (x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2)))))
(f2347 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2348)
(let (prov '5)
((a2343 '5))
(let (prov '42)
((a2344 '42))
(app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((define (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call kont2345 num1 num2)
(let (prov
[lambda
(x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2))])
((f2347 (lambda (x)
(let (prov
[lambda
(y)
(kont2345 x)])
((f2346 (lambda (y) (kont2345 x))))
(f2346 num2)))))
(f2347 num1)))
(define (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main kont2348)
(let (prov '5)
((a2343 '5))
(let (prov '42)
((a2344 '42))
(app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((proc (lam2349 env2350 y)
(let ([kont2345 (env-ref env2350 2)]) (let ([x (env-ref env2350 1)]) (clo-app kont2345 x))))
(proc (lam2351 env2352 x)
(let ([kont2345 (env-ref env2352 2)])
(let ([num2 (env-ref env2352 1)])
(let ([f2346 (make-closure lam2349 x kont2345)]) (clo-app f2346 num2)))))
(proc (call _2353 kont2345 num1 num2)
(let ([f2347 (make-closure lam2351 num2 kont2345)]) (clo-app f2347 num1)))
(proc (brouhaha_main _2356 kont2348)
(let ([a2343 '5])
(let ([a2344 '42]) (clo-app app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((proc (lam2349 env2350 y)
(let ([kont2345 (env-ref env2350 2)]) (let ([x (env-ref env2350 1)]) (clo-app kont2345 x))))
(proc (lam2351 env2352 x)
(let ([kont2345 (env-ref env2352 2)])
(let ([num2 (env-ref env2352 1)])
(let ([f2346 (make-closure lam2349 x kont2345)]) (clo-app f2346 num2)))))
(proc (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call _2353 kont2345 num1 num2)
(let ([f2347 (make-closure lam2351 num2 kont2345)]) (clo-app f2347 num1)))
(proc (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main _2356 kont2348)
(let ([a2343 '5])
(let ([a2344 '42]) (clo-app app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'("241: " a23172327 42)
'("241: " a23162326 5)
'((proc (lam2328 env2329 y23152325)
(let ([kont2318 (env-ref env2329 2)])
(let ([x23142323 (env-ref env2329 1)]) (clo-app kont2318 x23142323))))
(proc (lam2330 env2331 x23142323)
(let ([kont2318 (env-ref env2331 2)])
(let ([num2 (env-ref env2331 1)])
(let ([f23192324 (make-closure lam2328 x23142323 kont2318)]) (clo-app f23192324 num2)))))
(proc (call _2332 kont2318 num1 num2)
(let ([f23202322 (make-closure lam2330 num2 kont2318)]) (clo-app f23202322 num1)))
(proc (brouhaha_main _2335 kont2321)
(let ([a23162326 '5]) (let ([a23172327 '42]) (clo-app call kont2321 a23162326 a23172327)))))
'((proc (lam2328 env2329 y23152325)
(let ([kont2318 (env-ref env2329 2)])
(let ([x23142323 (env-ref env2329 1)]) (clo-app kont2318 x23142323))))
(proc (lam2330 env2331 x23142323)
(let ([kont2318 (env-ref env2331 2)])
(let ([num2 (env-ref env2331 1)])
(let ([f23192324 (make-closure lam2328 x23142323 kont2318)]) (clo-app f23192324 num2)))))
(proc (call _2332 kont2318 num1 num2)
(let ([f23202322 (make-closure lam2330 num2 kont2318)]) (clo-app f23202322 num1)))
(proc (brouhaha_main _2335 kont2321)
(let ([a23162326 '5]) (let ([a23172327 '42]) (clo-app call kont2321 a23162326 a23172327)))))
'((proc (lam2349 env2350 y)
(let ([kont2345 (env-ref env2350 2)]) (let ([x (env-ref env2350 1)]) (clo-app kont2345 x))))
(proc (lam2351 env2352 x)
(let ([kont2345 (env-ref env2352 2)])
(let ([num2 (env-ref env2352 1)])
(let ([f2346 (make-closure lam2349 x kont2345)]) (clo-app f2346 num2)))))
(proc (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call _2353 kont2345 num1 num2)
(let ([f2347 (make-closure lam2351 num2 kont2345)]) (clo-app f2347 num1)))
(proc (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main _2356 kont2348)
(let ([a2343 '5])
(let ([a2344 '42]) (clo-app app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
'((proc (lam2349 env2350 y)
(let ([kont2345 (env-ref env2350 2)]) (let ([x (env-ref env2350 1)]) (clo-app kont2345 x))))
(proc (lam2351 env2352 x)
(let ([kont2345 (env-ref env2352 2)])
(let ([num2 (env-ref env2352 1)])
(let ([f2346 (make-closure lam2349 x kont2345)]) (clo-app f2346 num2)))))
(proc (prov (define (call num1 num2)
(let ([x num1] [y num2]) x)))
(call _2353 kont2345 num1 num2)
(let ([f2347 (make-closure lam2351 num2 kont2345)]) (clo-app f2347 num1)))
(proc (prov (define (brouhaha_main)
(call '5 '42)))
(brouhaha_main _2356 kont2348)
(let ([a2343 '5])
(let ([a2344 '42]) (clo-app app (prov (call '5 '42)) call kont2348 a2343 a2344)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment