On this page:
2.1 Identity
«λ-using-app»
«λ»
«λ-env»
«λ-app-env»
«λ-example-low-level-app»
«app»
«λ-example»
«let»
«let-env»
«program»
«program-with-basic-env»
«*»

2 Tests and examples for envlang/rkt🔗ℹ

2.1 Identity🔗ℹ

(|\| #hash() env args
     (|\| (hash-set
           (hash-set
            (hash-set
             empty-hash
             "arg-name" (symbol->string (@ promise-e env (car (@ force env args)))))
          "body" (car (cdr (@ force env args))))
         "saved-env" env)
        env
        args
        (@ (hash-ref closure "body")
           (hash-set (hash-ref closure "saved-env")
                     (hash-ref closure "arg-name")
                     (map (envlang->racket (|\| #hash() env args
                                                (@ force env (car args)))
                                           env)
                          (@ force env args)))
           args)))

«λ» ::=
(|\| closure env args
     (|\| (@ hash-set env
             (delay (list (delay (@ hash-set env
                                    (delay (list (delay (@ hash-set env
                                                           (delay (list (delay (@ hash-set env
                                                                                  (delay (list (delay empty-hash)
                                                                                               (delay "arg-name")
                                                                                               (delay (@ symbol->string env
                                                                                                         (delay (list (delay (@ promise-e env
                                                                                                                                (@ car env (delay (list (delay (@ force env args)))))))))))))))
                                                                      (delay "body")
                                                                      (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args))))))))))))))
                                               (delay "saved-env")
                                               (delay env)))))
                        (delay "saved-closure")
                        (delay closure))))
        env
        args
        (@ (@ hash-ref env (delay (list (delay closure) (delay "body"))))
           (@ hash-set env (delay (list (delay (@ hash-ref env (delay (list (delay closure) (delay "saved-env")))))
                                        (delay (@ hash-ref env (delay (list (delay closure) (delay "arg-name")))))
                                        (delay (@ map env (delay (list (delay (@ envlang->racket env (delay (list (delay  (|\| #hash() env args
                                                                                                                               (@ force env (@ car env (delay (list (delay args)))))))
                                                                                                                  (delay env)))))
                                                                       (delay (@ force env args)))))))))
           args)))

(@ hash-set env (delay (list (delay env) (delay "λλ") (delay «λ»))))

(@ hash-set env (delay (list (delay «λ-env») (delay "envlang#%app") (delay «app»))))

(@ (|\| #hash() env args
        (@ 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)))))
                                 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay x) (delay x)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2)))))
                                 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay y) (delay y)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2)))))
                                 (delay (@ (@ (@ λλ env (delay (list (delay x) (delay (@ λλ env (delay (list (delay y) (delay x)))))))) env (delay (list (delay 1)))) env (delay (list (delay 2)))))))))
   «λ-env»
   #f)

(|\| closure env args
     (@ (|\|
        closure env args
        (@ (@ force env (@ car env (delay (list (delay args)))))
           env
           (delay (@ cdr env (delay (list (delay args)))))))
       env
       (@ force env args)))

(@ (|\| #hash() env args
        (list (((λλ x (λλ x 1)) 1) 2)
              (((λλ x (λλ x x)) 1) 2)
              (((λλ x (λλ y y)) 1) 2)
              (((λλ x (λλ y x)) 1) 2)))
   «λ-app-env»
   #f)

(list (((λλ x (λλ x 1)) 1) 2) (((λλ x (λλ x x)) 1) 2) (((λλ x (λλ y y)) 1) 2) (((λλ x (λλ y x)) 1) 2))

(|\| closure env args
     (@ (|\| (@ hash-set env
             (delay (list (delay (@ hash-set env
                                    (delay (list (delay (@ hash-set env
                                                           (delay (list (delay (@ hash-set env
                                                                                  (delay (list (delay (@ hash-set env
                                                                                                         (delay (list (delay empty-hash)
                                                                                                                      (delay "arg-name")
                                                                                                                      (delay (@ symbol->string env
                                                                                                                                (delay (list (delay (@ promise-e env
                                                                                                                                                       (@ car env (delay (list (delay (@ force env args)))))))))))))))
                                                                                             (delay "value")
                                                                                             (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args))))))))))))))
                                                                      (delay "body")
                                                                      (delay (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args))))))))))))))))))
                                               (delay "saved-env")
                                               (delay env)))))
                        (delay "saved-closure")
                        (delay closure))))
        env
        args
        (@ (@ hash-ref env (delay (list (delay closure) (delay "body"))))
           (@ hash-set env (delay (list (delay (@ hash-ref env (delay (list (delay closure) (delay "saved-env")))))
                                        (delay (@ hash-ref env (delay (list (delay closure) (delay "arg-name")))))
                                        (delay (@ car env (delay (list (delay (@ map env (delay (list (delay (@ envlang->racket env (delay (list (delay  (|\| #hash() env args
                                                                                                                              (@ force env (@ car env (delay (list (delay args)))))))
                                                                                                                  (delay env)))))
                                                                       (delay (@ force env args)))))))))))))
           args))
       env
       (delay (list (delay (@ force env (@ car env (delay (list (delay (@ cdr env (delay (list (delay (@ force env args)))))))))))))))

env (hash-ref closure "value"))

(@ hash-set env (delay (list (delay env) (delay "let") (delay «let»))))

(let x 1
  (let x (let x x x)
    x))

(@ (|\| #hash() env args
        (@ (|\| #hash() env args
                «program»)
          «let-env»
          #f))
   «λ-app-env»
   #f)

«*» ::=