rendered paste body/** ---------------------------------------------------------
holds if the blank (0) is moved right successfully within one row
---------------------------------------------------------- */
move_right(CurrentBoard, NewBoard) :-
append(PrevRows, [CurrentRow], R1),
append(R1, NextRows, CurrentBoard),
move_right_within_row(CurrentRow, ResultingRow),
append(PrevRows, [ResultingRow], R2),
append(R2, NextRows, NewBoard).
/** ---------------------------------------------------------
helper function
holds if the blank (0) is moved right successfully
assume only one blank exists
---------------------------------------------------------- */
move_right_within_row(CurrentRow, ResultingRow) :-
append(Start, [0, X | End], CurrentRow),
append(Start, [X, 0 | End], ResultingRow).
init(d, [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 0, 15],
[13, 12, 11, 14]
]).
?- init(d, S), move_right(S, B).
ERROR: Out of global stack