The reflective tower Blond
(blond)
(load "exit.bl")
(exit "good bye")
(exit "farewell!")
(blond-exit)
(blond)
(add1 (openloop "marvin"))
((delta (e r k) 41))
((lambda (x) (openloop "foo")) 0)
((delta (e r k) x))
(let ((x 1))
((delta (e r k)
(openloop "fox" r))))
x
((delta (e r k)
(meaning (car e) r k)) "hello world")
(let ((x "hello world"))
((delta (e r k)
(meaning (car e) r k)) x))
(meaning 1 (reify-new-environment) (lambda (x) x))
(meaning 1 (reify-new-environment) add1)
(meaning 'foobarbaz (reify-new-environment) quote)
(blond-exit)
(blond)
(define map
(lambda (f l) ; (Val -> Val) * List(Val) -> List(Val)
((rec self (lambda (l)
(if (null? l)
'()
(cons (f (car l)) (self (cdr l)))))) l)))
(map (lambda (x) x) '(1 2 3))
(map add1 '(1 2 3))
(map quote '(1 2 3))
(map (delta (e r k) e) '(1 2 3))
(blond-exit)
(blond)
((delta (e r k) (common-define env r)))
env
(env 'x)
(let ((x 'foobar))
((delta (e r k)
(common-define env-x r))))
env-x
(env-x 'x)
(meaning 'x env-x (lambda (x) x))
(env-x 'x)
(env-x 'x 'foobarbaz)
(env-x 'x)
(meaning '(set! x 'foo) env-x (lambda (x) x))
(env-x 'x)
(meaning '(define y x) env-x (lambda (x) x))
(env-x 'y)
(blond-exit)
(blond)
((reify-new-continuation "rock"
(extend-reified-environment '(foo)
'("bar")
(reify-new-environment)))
"bottom")
foo
((reify-new-continuation "Multivac") "new-bottom-level")
((delta (e r k) "bye"))
(blond-exit)
(blond)
(load "scheme.bl")
(continuation-mode)
(add1 (call/cc (lambda (k) 3)))
(add1 (call/cc (lambda (k) (k 3))))
(add1 (call/cc (lambda (k) (sub1 (k 3)))))
(call/cc (lambda (k) (common-define cont-0-6 k)))
'dummy ; cont-0-6 is bound to the continuation of iteration 6 at level 0
(cont-0-6 "back to 0-6")
(exit "exit from level 0")
(cont-0-6 "back again to 0-6")
(exit "exit again from level 0")
(blond-exit)
(blond)
(mute-load "scheme.bl")
(switch-continuation-mode)
(add1 (call/cc (lambda (k) 3)))
(add1 (call/cc (lambda (k) (k 3))))
(add1 (call/cc (lambda (k) (sub1 (k 3)))))
(call/cc (lambda (k) (common-define cont-0-6 k)))
'dummy ; cont-0-6 is bound to the continuation of iteration 6 at level 0
(cont-0-6 "back to 0-6")
(exit "exit from level 0")
(cont-0-6 "back again to 0-6")
(exit "exit again from level 0")
(exit 3)
(exit 3)
(exit "at last!")
(blond-exit)
(blond)
(load "nexit.bl")
(nexit 256)
(nexit 64)
(nexit 8)
(nexit 0)
(blond-exit)
(blond)
(load "swap.bl")
(swap! 2 1)
(bye)
(bye)
(bye)
(bye)
(blond-exit)
(blond)
(load "permute.bl")
(load "exit.bl")
(permute!)
(exit "bye")
(exit "ibid.")
(exit "again")
(exit "more")
(blond-exit)
(blond)
(load "swap.bl")
(load "nexit.bl")
(swap! 85 133)
(bye)
(nexit 83)
(bye)
(bye)
(bye)
(nexit 45)
(bye)
(bye)
(nexit 166)
(blond-exit)
(blond)
(mute-load "scheme.bl")
(mute-load "blond.scm")
(call/ce
(lambda (r)
(openloop "blond" r)))
(blond)
car
'(1 2 3)
(car '(1 2 3))
(blond-exit)
car
(blond-exit)
Playground
Happy Happy Joy Joy!