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?
324 Views Asked by superlizardmo At
1
There are 1 best solutions below
Related Questions in RACKET
- Lambda function not returning any value
- How to programmatically expand the let* family of functions in racket
- How can I combine `raco pkg install --scope-dir` and `raco exe`?
- Scheme Question - How can I check if there are a list of pairs
- How to return in Scheme?
- Racket: Evaluate a hand in Blackjack
- why is this define not an expression?
- Issue writing to JSON file - invalid key
- How can I flatten a racket list recursively?
- Making a deck of cards in Racket
- Function typing in TypedRacket
- What are .rkt~ files and what purpose do they serve?
- Parallel HTTP Requests Deadlock when Run from Dr Racket
- Removing all duplicate integers and sublists from a list
- Racket: Using recursion to make a mergesort function
Related Questions in SEMANTICS
- Perceived changes in the last decade (or more?) with respect to the semantics of char** and char*[] declarations in the c language
- Shared triples between two knowledge graphs
- eval vs Function() return semantics
- Is a hidden heading in the <footer> needed for accessibility?
- How to make talkback read out Text and switch together in Android?
- How Vespa addresses memory limitations in big data applications
- Custom HLSL Structure
- Inconsistency in application of the increment operator when used in expressions
- Is it a semantic or syntax error to not have an argument list after a name prefixed by the template keyword?
- For..of loops confusion
- showSemanticsDebugger does not work anymore
- Flutter, automatically add Semantics value to all Text Widgets
- Are there any scenarios where it would be appropriate to use an H1 in a document after an H1 has already been used?
- TextField onValueChange - Announce Additional Semantics
- Semantics (Subtyping)
Related Questions in PLT-REDEX
- Can be implemented a let* like expression in PLT-Redex?
- Reduction-relation's in-hole may match a hole many different ways
- Lisp to formalize the China Wall Model
- lisp-"car: contract violation expected: pair? given: ()" while destroy an obj in an access control model
- Generating only well-typed terms when testing semantics using PLT-Redex
- Trying to define a small language with redex
- Why do I need evaluation contexts in Redex?
- plt-redex: capture-avoiding substitution for free?
- Redex Does Not Match
- Invoke judgment from from within reduction-relation
- How to implement equi-recursive types in PLT Redex?
- Ellipsis over unquote in redex term
- Print successes with redex-check
- Compare model to implementation in Redex
- Racket, PLT Redex, test-->E non existence
Related Questions in REDEX
- JS regular expressions for fisrt one letter and numbers
- Match text from two different lines using Regex
- Web Scraping Wikipedia
- Error in Regex101 or my code? JavaScript / Node
- What are the redexes in this Haskell expression?
- Exclude a word from Regex using PHP and YITH Bulk Editing
- Extending a reduction relation
- Bizarre Contract Violation in Judgment
- Understanding lambda substitution in Redex
- Reduction-relation's in-hole may match a hole many different ways
- How to create a dictionary mapping on custom dictionary in Racket?
- Is my understanding of a reducible expression i.e. redex correct?
- Why do I need evaluation contexts in Redex?
- How to setup Facebook Redex in order to optimize Android Bytecodes?
- Compiling Facebook Redex on OSX Yosemite
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
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.