It's perfectly possible to write the evaluation rules for my language without using evaluation contexts. My semantics are entirely call by value and do not permit the term to be stepped forwards inside of lambdas. Despite this, all the resources I've seen use reduction contexts in some way. Is there a good reason to use contexts that I am missing?
Why do I need evaluation contexts in Redex?
322 Views Asked by superlizardmo At
1
There are 1 best solutions below
Related Questions in RACKET
- Writing a `define-let` macro, with hygiene
- Racket/Scheme embed list within existing list
- display executing name of the current running script
- How is it possible to filter a list of directories via "directory-exists?"?
- create a new list in the same format as taken from text file
- Find empy lines in text file
- remove file name if it is already in the list
- Is there a way to see the body of a lambda in Racket?
- Transpose a matrix in racket (list of lists
- write list to file using display-lines-to-file
- Racket: Graphing a parabola with elements from a list
- Racket\Scheme compare and delete unwanted items in a list
- Extracting the number of members inside a structure
- Racket db disconnect raises an exception
- Using .ico files as icons when creating executables in DrRacket IDE
Related Questions in SEMANTICS
- HTML - How to properly mark a phrase
- OWL. How to express that siblings has common parent?
- Virtuoso 37000 Error SP030
- What is the semantic HTML tag to display for URLs that are not links?
- Escaping percentage character in Sass (SCSS)
- semantics of verb-attached preposition phrases Prolog
- What are the algorithms which could be sued to match sentences?
- Tag <b> is ignored in mobile?
- Is move semantics just a shallow copy and setting other's pointers to null?
- Why does std::chrono::time_point not behave as expected?
- C# Nested initialization strangeness
- Identifying the context of word in sentence
- Semantics of identifier line in Python
- Getting "error LNK2019: unresolved external symbol ... "
- Emacs semantic auto-complete show error?
Related Questions in PLT-REDEX
- plt-redex: capture-avoiding substitution for free?
- lisp-"car: contract violation expected: pair? given: ()" while destroy an obj in an access control model
- Lisp to formalize the China Wall Model
- Can be implemented a let* like expression in PLT-Redex?
- Ellipsis over unquote in redex term
- How to implement equi-recursive types in PLT Redex?
- Invoke judgment from from within reduction-relation
- Redex Does Not Match
- Why do I need evaluation contexts in Redex?
- Racket, PLT Redex, test-->E non existence
- Reduction-relation's in-hole may match a hole many different ways
- PLT Redex: parameterizing a language definition
- Can PLT-Redex model these features?
- Reduction Expression in Java?
- Compare model to implementation in Redex
Related Questions in REDEX
- JS regular expressions for fisrt one letter and numbers
- Exclude a word from Regex using PHP and YITH Bulk Editing
- Bizarre Contract Violation in Judgment
- Why do I need evaluation contexts in Redex?
- Is my understanding of a reducible expression i.e. redex correct?
- Reduction-relation's in-hole may match a hole many different ways
- Please install double-conversion library when building redex
- Compiling Facebook Redex on OSX Yosemite
- How to setup Facebook Redex in order to optimize Android Bytecodes?
- Understanding lambda substitution in Redex
- What are the redexes in this Haskell expression?
- Web Scraping Wikipedia
- Match text from two different lines using Regex
- Error in Regex101 or my code? JavaScript / Node
- How to create a dictionary mapping on custom dictionary in Racket?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Short answer: You don't, but its much easier with them.
Long answer: Pretty much everything you would use an evaluation context for, you can do yourself with a different reduction rule in your reduction relation, it just becomes much more obnoxious, especially as you model anything but the smallest of languages.
Let's say you want to model the call by value lambda calculus. The language for it (without evaluation contexts) would be:
(here, the last two lines are used to take advantage of Redex's capture avoiding substitution.
Now, lets try making the semantics for this language without using evaluation contexts. There are two places we can expand sub-expressions, the operator and the operand of function application. So, including that with normal beta-reduction gives us:
This isn't too bad, but remember that we have to add an additional rule for every place that a sub-expression can be evaluated. So let would need its own rule, if would need its own rule, etc. And remember that this is on top of the rules for each of these forms.
A much easier way to do this is just with evaluation contexts, which allows us to specify which expressions have sub-expressions that can take a step, and what order they should happen in. So let's try rewriting our
Lvlanguage with evaluation contexts:It's three lines longer now, but this tells redex that we'll be evaluating our expressions in an evaluation context,
E, and when its done evaluating the expression, place it into the context (whereholeis the top-level context so to speak). Thus, we can reduce our reduction relation down to just one rule, beta reduction:Here we use
in-holeto say that we are in a hole that followsEas shown above. This follows call by value semantics because holes can only appear from left to right in applications.You can imagine that if you had a much larger calculi with many sub-expressions that this would save you from writing a very large amount of reduction rules.
So, to recap, you don't need to, it just makes your model much much shorter.