www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | LICENSE

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>)]