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

This commit is contained in:
Suzanne Soy 2021-03-15 03:32:27 +00:00
parent 400f7bf47c
commit 734dc957e0

View File

@ -298,17 +298,22 @@ 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
|| [] ;; mapping from names to values || [] ;; env mapping from names to values
|| "str" || "str"
|| 0 || 0
|| get || get ;; env → key → value
|| push || push ;; env → key → value → env
|| pop || drop ;; env → key → env
|| 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
@ -318,34 +323,32 @@ 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 env=E, χ=X (@ (\ env χ e) v-env (\ env () e-arg)) APP [E] (@ (\ env e) [E])
=> env=v-env,χ=(\ env () e-arg) e => [E] e
;;--------------------------------------------------------------------------------------------------------------------------- ;;---------------------------------------------------------------------------------------------------------------------------
;; Evaluation of sub-parts of an application ;; Evaluation of sub-parts of a primitive application
APP-F env=E, χ=X (@ e-f e-env e-arg) APP-F [E] (@ e-f e-env)
=> env=E, χ=X e-f [env=E,χ=X],(@ _ e-env e-arg) => [E] e-f [E],(@ _ e-env)
APP-ENV env=E, χ=X (@ e-f e-env e-arg) APP-ENV [E] (@ e-f e-env)
=> env=E, χ=X e-env [env=E,χ=X],(@ v-f _ e-arg) => [E] e-env [E],(@ v-f _ )
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) ;; Syntactic sugar (insertion of #%app for all parentheses that don't start with @)
SUGAR-APP env=E, χ=X (#%app e-f e-arg ) SUGAR-APP [E] ( e-f e-arg ... )
=> env=E, χ=X (@ (@ (get env "#%app") => [E] (@ (@ (@ (@ get env) "#%app")
env (@ (@ (@ push env) "χ")
(\ env () e-f)) (list (\ env e-f) (\ env e-arg) ...))))
env ;; where the default definition of #%app makes this reduce to:
(\ env () e-arg)) => env=E, χ=X (@ e-f env (list (\ env e-arg) ...))
;; defaults to:
=> env=E, χ=X (@ e-f env (\ env () e-arg))
SUGAR-LAM env=E, χ=X (λ var-name e) ;; in particular, SUGAR-APP for lambda-expressions gives
=> env=E, χ=X (#%app (#%app λ var-name) e) SUGAR-APP env=E, χ=X (λ var-name e)
;; defaults to: => env=E, χ=X (@ (@ (@ get env) "#%app")
(@ (@ (@ push env) "χ")
(list (\ env λ) (\ env var-name) (\ env e))))
;; where the default definition of λ reduces to:
=> env=E, χ=X (@ capture => env=E, χ=X (@ capture
env (push env)
(λ env χ (@ (λ env χ e) (λ env χ (@ (λ env χ e)
(add env "var-name" χ) (add env "var-name" χ)
χ))) χ)))