summaryrefslogtreecommitdiffstats
path: root/content/zettel/1b1.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/zettel/1b1.md')
-rw-r--r--content/zettel/1b1.md50
1 files changed, 50 insertions, 0 deletions
diff --git a/content/zettel/1b1.md b/content/zettel/1b1.md
new file mode 100644
index 0000000..14b0c84
--- /dev/null
+++ b/content/zettel/1b1.md
@@ -0,0 +1,50 @@
++++
+title = "Guarded commands"
+author = "Yann Herklotz"
+tags = []
+categories = []
+backlinks = ["1d1", "1b2", "1b"]
+forwardlinks = ["1b2"]
+zettelid = "1b1"
++++
+
+Guarded commands \[1\] are an interesting construct which can be added
+to languages. They look similar to `case` statements, but behave in a
+parallel and nondeterministic way. Each guard has a boolean value
+followed by a program which may be executed if the guard evaluates to
+true. The following shows the main syntax that guards may have.
+
+``` grammar
+e ::= if gc fi | do gc od ...
+
+gc ::= (b e) || gc
+```
+
+One reason these are interesting language constructs, is because they
+allow for the encoding of commands that may be executed when a condition
+is true, but that it isn't necessary. Often, when giving instructions,
+one does not really specify the order, just the commands that should
+eventually be executed.
+
+The guarded commands `gc` will either return a match if a boolean
+evaluates to true, or `abort`. There are two constructs that are built
+around guarded commands which adds more functionality to them.
+`if gc fi` matches one rule in the guarded statement and executes it. If
+it does not match a rule, it then acts like `abort`. `do gc od` loops
+over the guarded commands while any rule matches. If there no match is
+found, it acts like `skip`.
+
+These allow for nice encoding of common algorithms, using two other
+constructs that use the guarded commands.
+
+<div id="refs" class="references csl-bib-body" markdown="1">
+
+<div id="ref-winskel93" class="csl-entry" markdown="1">
+
+<span class="csl-left-margin">\[1\]
+</span><span class="csl-right-inline">G. Winskel, *The formal semantics
+of programming languages: An introduction*. MIT press, 1993.</span>
+
+</div>
+
+</div>