summaryrefslogtreecommitdiff
path: root/prolog/problems/algol/algol_3/en.py
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@fri.uni-lj.si>2016-05-22 17:48:30 +0200
committerTimotej Lazar <timotej.lazar@fri.uni-lj.si>2016-05-22 17:48:30 +0200
commitbbcb29a202436fc0e222e187f1fadf0b1f305465 (patch)
treefed504361df37c4ce01b5b13c1082d5f3234de79 /prolog/problems/algol/algol_3/en.py
parent4973979e40dfdc26dafe1cdeddf8e0bce859ba5d (diff)
Prolog: update denotational_semantics problems
Diffstat (limited to 'prolog/problems/algol/algol_3/en.py')
-rw-r--r--prolog/problems/algol/algol_3/en.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/prolog/problems/algol/algol_3/en.py b/prolog/problems/algol/algol_3/en.py
new file mode 100644
index 0000000..3b91a47
--- /dev/null
+++ b/prolog/problems/algol/algol_3/en.py
@@ -0,0 +1,32 @@
+name = 'algol/3'
+slug = 'interpreter for mini-algol'
+
+description = '''\
+<p>A DCG for mini-algol.</p>
+<pre>
+% apply a function to a starting state
+?- apply([a=2], Out, fun(_In, Out, eval(a+3, _In, Out))).
+ Out = 5.
+
+% a := a+b
+% b := a-b
+% a := a-b
+?- _Program = [begin,a,:=,a+b,b,:=,a-b,a,:=,a-b,end],
+ algol(_F, _Program, []),
+ apply([a=3,b=5], Output, _F).
+ Output = [a=5,b=3,printout=[]].
+
+% a := 0
+% while a < 10 do
+% begin
+% print(a)
+% a := a+1
+% end
+?- _Program = [begin,a,:=,0,while,a,<,10,do,begin,print(a),a,:=,a+1,end,end],
+ algol(_F, _Program, []),
+ apply([a=3], Output, _F).
+ Output = [a=10,printout=[0,1,2,3,4,5,6,7,8,9]].
+</pre>
+'''
+
+hint = {}