Revert "Tried removing "x", I don't like it"

This reverts commit 184886461ef3c5d70f30ba63b7257963f99fb53f.
This commit is contained in:
Suzanne Soy 2021-03-15 03:32:36 +00:00
parent 734dc957e0
commit b2fbddcba0

View File

@ -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" χ)
χ))) χ)))