From 52a65d75cd7adc7983d4e6c45709b7571497ca9a Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 22 May 2016 18:07:57 +0200 Subject: Prolog: update initial code for denotational_semantics problems --- .../prog_listswap_3/common.py | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'prolog/problems/denotational_semantics/prog_listswap_3') diff --git a/prolog/problems/denotational_semantics/prog_listswap_3/common.py b/prolog/problems/denotational_semantics/prog_listswap_3/common.py index 3ad93e8..800717e 100644 --- a/prolog/problems/denotational_semantics/prog_listswap_3/common.py +++ b/prolog/problems/denotational_semantics/prog_listswap_3/common.py @@ -21,3 +21,30 @@ instr174((R0,C0)-->(R0,C)) --> instr174((R0,C0)-->(R,C0)) --> [swap], {swap(R0,C0,R)}.''' + +# nothing to do in this exercise +initial = '''\ +prog_listswap(In-->Out) --> + [begin], instructs((In,1)-->(Out,_)), [end]. + +% one instruction +instructs((R0,C0)-->(R,C)) --> + instr((R0,C0)-->(R,C)). +% sequence of instructions +instructs((R0,C0)-->(R,C)) --> + instr((R0,C0)-->(R1,C1)), + instructs((R1,C1)-->(R,C)). + +% "left" and "right" instructions move the cursor (but not outside list bounds) +instr((R0,C0)-->(R0,C)) --> + [left], + { C0 > 1, C is C0 - 1 ; C0 =< 1, C is C0 }. +instr((R0,C0)-->(R0,C)) --> + [right], + { length(R0, LenR0), (C0 < LenR0, C is C0 + 1 ; C0 >= LenR0, C is C0) }. + +% "swap" instruction swaps the element under cursor with the element on the left +instr((R0,C0)-->(R,C0)) --> + [swap], + { swap(R0, C0, R) }. +''' -- cgit v1.2.1