summaryrefslogtreecommitdiff
path: root/prolog/problems/denotational_semantics/prog_listswap_3/common.py
blob: 3ad93e8f4e27bc953b14bcf6ca39c33efc1dad2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
id = 174
number = 20
visible = True
facts = 'denotational_semantics_aux__predicates'

solution = '''\
prog_listswap(In-->Out) -->
    [begin], instructs174((In,1)-->(Out,_)), [end].

instructs174((R0,C0)-->(R,C)) -->
    instr174((R0,C0)-->(R,C)).
instructs174((R0,C0)-->(R,C)) -->
    instr174((R0,C0)-->(R1,C1)),
    instructs174((R1,C1)-->(R,C)).

instr174((R0,C0)-->(R0,C)) -->
    [left], { C0 > 1, C is C0 - 1 ; C0 =< 1, C is C0 }.
instr174((R0,C0)-->(R0,C)) -->
  [right], { length(R0, LenR0),
            ( C0 < LenR0, C is C0 + 1 ; C0 >= LenR0, C is C0 ) }.

instr174((R0,C0)-->(R,C0)) -->
  [swap], {swap(R0,C0,R)}.'''