summaryrefslogtreecommitdiff
path: root/prolog/problems/denotational_semantics/algol_for_3
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/denotational_semantics/algol_for_3
parent4973979e40dfdc26dafe1cdeddf8e0bce859ba5d (diff)
Prolog: update denotational_semantics problems
Diffstat (limited to 'prolog/problems/denotational_semantics/algol_for_3')
-rw-r--r--prolog/problems/denotational_semantics/algol_for_3/common.py92
-rw-r--r--prolog/problems/denotational_semantics/algol_for_3/en.py18
2 files changed, 0 insertions, 110 deletions
diff --git a/prolog/problems/denotational_semantics/algol_for_3/common.py b/prolog/problems/denotational_semantics/algol_for_3/common.py
deleted file mode 100644
index 1107308..0000000
--- a/prolog/problems/denotational_semantics/algol_for_3/common.py
+++ /dev/null
@@ -1,92 +0,0 @@
-id = 178
-number = 85
-visible = False
-facts = None
-
-solution = '''\
-algol_for(fun(S0,S,apply178([printout=[]|S0],S,Minstructs))) -->
- [begin], instructs178(Minstructs), [end].
-
-instructs178(Minstr) --> instr178(Minstr).
-instructs178(fun(S0,S,
- (apply178(S0,S1,Minstr),
- apply178(S1,S,Minstructs))))
- -->
- instr178(Minstr), instructs178(Minstructs).
-
-instr178(Massign) --> assign178(Massign).
-instr178(fun(S0,[printout = L1|S1],
- (memb(X = V,S0),
- del(printout = L0,S0,S1),
- conc(L0,[V],L1))))
- -->
- [print(X)].
-instr178(fun(S0,S,
- loop178(S0,Mcond,Minstructs,S)))
- -->
- [while], cond178(Mcond), [do,begin], instructs178(Minstructs), [end].
-instr178(fun(S0, S,
- (apply178(S0, S1, Minit),
- for178(S1, Mcond, Mstep, Mbody, S))))
- -->
- [for], assign178(Minit), [&], cond178(Mcond), [&], assign178(Mstep), [do, begin], instructs178(Mbody), [end].
-
-assign178(fun(S0,[X = Value|S1],
- (apply178(S0,Value,Mexpr),
- del(X = _,S0,S1))))
- -->
- var178(X), [:=], expr178(Mexpr).
-
-cond178( fun( S, TruthVal,
- (apply178(S,Val1,ME1),
- apply178(S,Val2,ME2),
- (Val1 < Val2,!,TruthVal = true ; TruthVal = false))))
- -->
- expr178(ME1), [<], expr178(ME2).
-
-var178(X) --> [X], {atom(X)}.
-
-expr178(fun(S,Value,eval(Expr,S,Value))) -->
- [Expr].
-
-apply178(In, Out, fun(In, Out, Goals)) :-
- call(Goals).
-
-loop178( State0, Mcond, _, State0) :-
- apply178( State0, false, Mcond), !.
-loop178( S0, Mcond, MBody, S) :-
- copy_term( MBody, MBodyCopy),
- apply178( S0, S1, MBody),
- loop178( S1, Mcond, MBodyCopy, S).
-
-for178(S0, Mcond, _, _, S0) :-
- apply178(S0, false, Mcond), !.
-for178(S0, Mcond, Mstep, Mbody, S) :-
- copy_term(Mbody, Mbody2),
- copy_term(Mstep, Mstep2),
- apply178(S0, S1, Mbody),
- apply178(S1, S2, Mstep),
- for178(S2, Mcond, Mstep2, Mbody2, S).
-
-eval178( N, _, N) :-
- number178( N), !.
-eval178( X, State, Val) :- % A program variable
- atom( X), !,
- memb( X = Val, State).
-eval178( E1 + E2, State, Val) :- !,
- eval178( E1, State, V1),
- eval178( E2, State, V2),
- Val is V1 + V2.
-eval178( E1 - E2, State, Val) :- !,
- eval178( E1, State, V1),
- eval178( E2, State, V2),
- Val is V1 - V2.
-eval178( E1 * E2, State, Val) :- !,
- eval178( E1, State, V1),
- eval178( E2, State, V2),
- Val is V1 * V2.
-eval178( E1 / E2, State, Val) :- !,
- eval178( E1, State, V1),
- eval178( E2, State, V2),
- Val is V1 / V2.
-'''
diff --git a/prolog/problems/denotational_semantics/algol_for_3/en.py b/prolog/problems/denotational_semantics/algol_for_3/en.py
deleted file mode 100644
index 2f46d36..0000000
--- a/prolog/problems/denotational_semantics/algol_for_3/en.py
+++ /dev/null
@@ -1,18 +0,0 @@
-name = 'algol_for/3'
-slug = 'interpreter for mini-algol with for-statement'
-
-description = '''\
-<p>Extend the given DCG for mini-algol to support the for-statement. Example:</p>
-<pre>
-% for a := 0 & a < 5 & a := a + 1 do
-% begin
-% print(a)
-% end
-?- _Program = [begin,for,a,:=,0,&,a,<,5,&,a,:=,a+1,do,begin,print(a),end,end],
- algol_for(_F, _Program, []),
- apply([a=2], Output, _F).
- Output = [a=5,printout=[0,1,2,3,4]].
-</pre>
-'''
-
-hint = {}