diff options
Diffstat (limited to 'prolog/problems')
-rw-r--r-- | prolog/problems/denotational_semantics/prog_8puzzle_2/common.py | 12 | ||||
-rw-r--r-- | prolog/problems/denotational_semantics/prog_listswap_3/common.py | 27 |
2 files changed, 27 insertions, 12 deletions
diff --git a/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py b/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py index c5b69da..22429cc 100644 --- a/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py +++ b/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py @@ -14,15 +14,3 @@ instr172 --> [right]. instr172 --> [up]. instr172 --> [down]. ''' - -initial = '''\ -prog_8puzzle --> [begin], instructs, [end]. - -instructs --> instr. -instructs --> instr, instructs. - -instr --> [left]. -instr --> [right]. -instr --> [up]. -instr --> [down]. -''' 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) }. +''' |