Den søn. 7. jun. 2020 kl. 14.09 skrev Siyuan Chen <chanse...@gmail.com>:
Unfortunately, this code doesn't work, because it lacks two functions, > `get-current-env` and `extends-env`. > These are not available since static lexical scope makes it possible for the compiler to determine where a variable is stored at compile time. Therefore an explicit environment is not needed. (See "early binding" vs "late binding"). > Is there any way to work around this issue? > > I have searched Racket's document. Racket has namespaces that are very > similar to the environment here. > > But it seems that `current-namespace` can not get binding (e.g. Just) and > `namespace-set-variable-value!` is a mutable function which is not suitable > as well. > Namespaces are "environment-like" but contain only top-level variables. Could someone give me some advice? > Or we can modify the code above to make it work in Racket. > Since this for educational/fun use and not practical, I suggest using a Scheme interpreter where the environments are explicit. Then you can easily add `get-current-env` and `extends-env` yourself. One option is the interpreter page LiSP (Lisp in Small Pieces) where an interpreter for fexprs is discussed with full working code. /Jens Axel https://racket-stories.com -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CABefVgwBO%2BMG6SH66mHM_-LTsxpWTBsTu-%3DKSQ-skwjmUQvBOA%40mail.gmail.com.