diff options
author | Timotej Lazar <timotej.lazar@fri.uni-lj.si> | 2016-05-22 18:07:57 +0200 |
---|---|---|
committer | Timotej Lazar <timotej.lazar@fri.uni-lj.si> | 2016-05-22 18:07:57 +0200 |
commit | 52a65d75cd7adc7983d4e6c45709b7571497ca9a (patch) | |
tree | 16944dd31bb7972cb368d2a49d92a68a26062c23 /prolog/problems/denotational_semantics | |
parent | bbcb29a202436fc0e222e187f1fadf0b1f305465 (diff) |
Prolog: update initial code for denotational_semantics problems
Diffstat (limited to 'prolog/problems/denotational_semantics')
-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) }. +''' |