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?
316 Views Asked by superlizardmo At
1
There are 1 best solutions below
Related Questions in RACKET
- php Variable name must change in for loop
- register_shutdown_function is not getting called
- Query returning zero rows despite entries existing
- Retrieving *number* pages by page id
- Automatically closing tags in form input?
- How to resize images with PHP PARSE SDK
- how to send email from localhost using codeigniter?
- Mariadb max Error while sending QUERY packet PID
- Multiusers login redirect different page in php
- Imaginary folder when I use "DirectoryIterator" in PHP?
Related Questions in SEMANTICS
- php Variable name must change in for loop
- register_shutdown_function is not getting called
- Query returning zero rows despite entries existing
- Retrieving *number* pages by page id
- Automatically closing tags in form input?
- How to resize images with PHP PARSE SDK
- how to send email from localhost using codeigniter?
- Mariadb max Error while sending QUERY packet PID
- Multiusers login redirect different page in php
- Imaginary folder when I use "DirectoryIterator" in PHP?
Related Questions in PLT-REDEX
- php Variable name must change in for loop
- register_shutdown_function is not getting called
- Query returning zero rows despite entries existing
- Retrieving *number* pages by page id
- Automatically closing tags in form input?
- How to resize images with PHP PARSE SDK
- how to send email from localhost using codeigniter?
- Mariadb max Error while sending QUERY packet PID
- Multiusers login redirect different page in php
- Imaginary folder when I use "DirectoryIterator" in PHP?
Related Questions in REDEX
- php Variable name must change in for loop
- register_shutdown_function is not getting called
- Query returning zero rows despite entries existing
- Retrieving *number* pages by page id
- Automatically closing tags in form input?
- How to resize images with PHP PARSE SDK
- how to send email from localhost using codeigniter?
- Mariadb max Error while sending QUERY packet PID
- Multiusers login redirect different page in php
- Imaginary folder when I use "DirectoryIterator" in PHP?
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 # Hahtags
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
Lv
language 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 (wherehole
is 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-hole
to say that we are in a hole that followsE
as 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.