demo-rkt.hl.rkt (9231B)
1 #lang hyper-literate #:꩜ envlang/rkt 2 3 ꩜title[#:tag "demo-rkt"]{Tests and examples for ꩜racketmodname[envlang/rkt]} 4 5 ꩜section{Identity} 6 7 ꩜chunk[<λ-using-app> 8 (\\ #hash() env args 9 (\\ (hash-set 10 (hash-set 11 (hash-set 12 empty-hash 13 "arg-name" (symbol->string (@ promise-e env (car (@ force env args))))) 14 "body" (car (cdr (@ force env args)))) 15 "saved-env" env) 16 env 17 args 18 (@ (hash-ref closure "body") 19 (hash-set (hash-ref closure "saved-env") 20 (hash-ref closure "arg-name") 21 (map (envlang->racket (\\ #hash() env args 22 (@ force env (car args))) 23 env) 24 (@ force env args))) 25 args)))] 26 27 ꩜chunk[<λ> 28 (\\ closure env args 29 (\\ (@ hash-set env 30 (delay (list (delay (@ hash-set env 31 (delay (list (delay (@ hash-set env 32 (delay (list (delay (@ hash-set env 33 (delay (list (delay empty-hash) 34 (delay "arg-name") 35 (delay (@ symbol->string env 36 (delay (list (delay (@ promise-e env 37 (@ car env (delay (list (delay (@ force env args))))))))))))))) 38 (delay "body") 39 (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args)))))))))))))) 40 (delay "saved-env") 41 (delay env))))) 42 (delay "saved-closure") 43 (delay closure)))) 44 env 45 args 46 (@ (@ hash-ref env (delay (list (delay closure) (delay "body")))) 47 (@ hash-set env (delay (list (delay (@ hash-ref env (delay (list (delay closure) (delay "saved-env"))))) 48 (delay (@ hash-ref env (delay (list (delay closure) (delay "arg-name"))))) 49 (delay (@ map env (delay (list (delay (@ envlang->racket env (delay (list (delay (\\ #hash() env args 50 (@ force env (@ car env (delay (list (delay args))))))) 51 (delay env))))) 52 (delay (@ force env args))))))))) 53 args)))] 54 55 ꩜chunk[<λ-env> 56 (@ hash-set env (delay (list (delay env) (delay "λλ") (delay <λ>))))] 57 58 ꩜chunk[<λ-app-env> 59 (@ hash-set env (delay (list (delay <λ-env>) (delay "envlang#%app") (delay <app>))))] 60 61 ꩜chunk[<λ-example-low-level-app> 62 (@ (\\ #hash() env args 63 (@ list env (delay (list (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay x) (delay 1)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2))))) 64 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay x) (delay x)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2))))) 65 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay y) (delay y)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2))))) 66 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay y) (delay x)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2))))))))) 67 <λ-env> 68 #f)] 69 70 ꩜chunk[<app> 71 (\\ closure env args 72 (@ (\\ 73 closure env args 74 (@ (@ force env (@ car env (delay (list (delay args))))) 75 env 76 (delay (@ cdr env (delay (list (delay args))))))) 77 env 78 (@ force env args)))] 79 80 ꩜chunk[<λ-example> 81 (@ (\\ #hash() env args 82 (list (((λλ x (λλ x 1)) 1) 2) 83 (((λλ x (λλ x x)) 1) 2) 84 (((λλ x (λλ y y)) 1) 2) 85 (((λλ x (λλ y x)) 1) 2))) 86 <λ-app-env> 87 #f)] 88 89 (list (((λλ x (λλ x 1)) 1) 2) 90 (((λλ x (λλ x x)) 1) 2) 91 (((λλ x (λλ y y)) 1) 2) 92 (((λλ x (λλ y x)) 1) 2)) 93 94 ꩜chunk[<let> 95 (\\ closure env args 96 (@ (\\ (@ hash-set env 97 (delay (list (delay (@ hash-set env 98 (delay (list (delay (@ hash-set env 99 (delay (list (delay (@ hash-set env 100 (delay (list (delay (@ hash-set env 101 (delay (list (delay empty-hash) 102 (delay "arg-name") 103 (delay (@ symbol->string env 104 (delay (list (delay (@ promise-e env 105 (@ car env (delay (list (delay (@ force env args))))))))))))))) 106 (delay "value") 107 (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args)))))))))))))) 108 (delay "body") 109 (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args)))))))))))))))))) 110 (delay "saved-env") 111 (delay env))))) 112 (delay "saved-closure") 113 (delay closure)))) 114 env 115 args 116 (@ (@ hash-ref env (delay (list (delay closure) (delay "body")))) 117 (@ hash-set env (delay (list (delay (@ hash-ref env (delay (list (delay closure) (delay "saved-env"))))) 118 (delay (@ hash-ref env (delay (list (delay closure) (delay "arg-name"))))) 119 (delay (@ car env (delay (list (delay (@ map env (delay (list (delay (@ envlang->racket env (delay (list (delay (\\ #hash() env args 120 (@ force env (@ car env (delay (list (delay args))))))) 121 (delay env))))) 122 (delay (@ force env args))))))))))))) 123 args)) 124 env 125 (delay (list (delay (@ force env (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args)))))))))))))))] 126 127 env 128 (hash-ref closure "value")) 129 130 ꩜chunk[<let-env> 131 (@ hash-set env (delay (list (delay env) (delay "let") (delay <let>))))] 132 133 ꩜chunk[<program> 134 (let x 1 135 (let x (let x x x) 136 x))] 137 138 ꩜chunk[<program-with-basic-env> 139 (@ (\\ #hash() env args 140 (@ (\\ #hash() env args 141 <program>) 142 <let-env> 143 #f)) 144 <λ-app-env> 145 #f)] 146 147 ꩜chunk[<*> 148 (begin 149 #;<λ-example> 150 <program-with-basic-env>)]