Revert "Tried removing "x", I don't like it"
This reverts commit 184886461ef3c5d70f30ba63b7257963f99fb53f.
This commit is contained in:
parent
734dc957e0
commit
b2fbddcba0
63
envlang.rkt
63
envlang.rkt
|
@ -298,22 +298,17 @@ location of expr current-continuation
|
||||||
|
|
||||||
#;(
|
#;(
|
||||||
;; Using first-class environments and lazy evaluations:
|
;; Using first-class environments and lazy evaluations:
|
||||||
;; λ, env, get, push, drop are keywords
|
;; λ, env, χ, get, push, drop are keywords
|
||||||
;; v-env
|
;; v-env
|
||||||
v ::= (\ env e) ;; open term, expects an env to close the term
|
v ::= (\ env χ e) ;; open term, expects an env to close the term
|
||||||
|| […] ;; env mapping from names to values
|
|| […] ;; mapping from names to values
|
||||||
|| "str"
|
|| "str"
|
||||||
|| 0
|
|| 0
|
||||||
|| get ;; env → key → value
|
|| get
|
||||||
|| push ;; env → key → value → env
|
|| push
|
||||||
|| drop ;; env → key → env
|
|| pop
|
||||||
|| car
|
|
||||||
|| cdr
|
|
||||||
|| (list v ...)
|
|
||||||
e ::= v
|
e ::= v
|
||||||
|| (@ e e)
|
|| (@ e e e)
|
||||||
|| env
|
|
||||||
|| (list e ...)
|
|
||||||
|
|
||||||
|
|
||||||
TODO: instead of ad-hoc var-to-string conversion, use a functional env
|
TODO: instead of ad-hoc var-to-string conversion, use a functional env
|
||||||
|
@ -323,32 +318,34 @@ TODO: instead of ad-hoc var-to-string conversion, use a functional env
|
||||||
=> environment′ redex′ continuation frames′
|
=> environment′ redex′ continuation frames′
|
||||||
|
|
||||||
;; Primitive application
|
;; Primitive application
|
||||||
APP [E] (@ (\ env e) [E′]) …
|
APP env=E, χ=X (@ (\ env χ e) v-env (\ env () e-arg)) …
|
||||||
=> [E′] e …
|
=> env=v-env,χ=(\ env () e-arg) e …
|
||||||
;;---------------------------------------------------------------------------------------------------------------------------
|
;;---------------------------------------------------------------------------------------------------------------------------
|
||||||
;; Evaluation of sub-parts of a primitive application
|
;; Evaluation of sub-parts of an application
|
||||||
APP-F [E] (@ e-f e-env) …
|
APP-F env=E, χ=X (@ e-f e-env e-arg) …
|
||||||
=> [E] e-f … [E],(@ _ e-env)
|
=> env=E, χ=X e-f … [env=E,χ=X],(@ _ e-env e-arg)
|
||||||
|
|
||||||
APP-ENV [E] (@ e-f e-env) …
|
APP-ENV env=E, χ=X (@ e-f e-env e-arg) …
|
||||||
=> [E] e-env … [E],(@ v-f _ )
|
=> env=E, χ=X e-env … [env=E,χ=X],(@ v-f _ e-arg)
|
||||||
|
|
||||||
|
APP-ARG env=E, χ=X (@ e-f e-env e-arg) …
|
||||||
|
=> env=E, χ=X e-arg … [env=E,χ=X],(@ v-f v-env _ )
|
||||||
;;---------------------------------------------------------------------------------------------------------------------------
|
;;---------------------------------------------------------------------------------------------------------------------------
|
||||||
;; Syntactic sugar (insertion of #%app for all parentheses that don't start with @)
|
;; Syntactic sugar (insertion of #%app)
|
||||||
SUGAR-APP [E] ( e-f e-arg ... ) …
|
SUGAR-APP env=E, χ=X (#%app e-f e-arg ) …
|
||||||
=> [E] (@ (@ (@ (@ get env) "#%app") …
|
=> env=E′, χ=X (@ (@ (get env "#%app")
|
||||||
(@ (@ (@ push env) "χ")
|
env
|
||||||
(list (\ env e-f) (\ env e-arg) ...))))
|
(\ env () e-f))
|
||||||
;; where the default definition of #%app makes this reduce to:
|
env
|
||||||
=> env=E′, χ=X (@ e-f env (list (\ env e-arg) ...)) …
|
(\ env () e-arg)) …
|
||||||
|
;; defaults to:
|
||||||
|
=> env=E′, χ=X (@ e-f env (\ env () e-arg)) …
|
||||||
|
|
||||||
;; in particular, SUGAR-APP for lambda-expressions gives
|
SUGAR-LAM env=E, χ=X (λ var-name e) …
|
||||||
SUGAR-APP env=E, χ=X (λ var-name e) …
|
=> env=E′, χ=X (#%app (#%app λ var-name) e) …
|
||||||
=> env=E′, χ=X (@ (@ (@ get env) "#%app")
|
;; defaults to:
|
||||||
(@ (@ (@ push env) "χ")
|
|
||||||
(list (\ env λ) (\ env var-name) (\ env e)))) …
|
|
||||||
;; where the default definition of λ reduces to:
|
|
||||||
=> env=E′, χ=X (@ capture
|
=> env=E′, χ=X (@ capture
|
||||||
(push env)
|
env
|
||||||
(λ env χ (@ (λ env χ e)
|
(λ env χ (@ (λ env χ e)
|
||||||
(add env "var-name" χ)
|
(add env "var-name" χ)
|
||||||
χ)))
|
χ)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user