I am attempting to create a maze program in Prolog, whereby the aim is to find a route from the start of the maze to a point in the centre of the maze called m. The maze consists of squares which are connected using one of four colours: Blue, Green, Purple or Orange. The route from start to the centre follows a repeating pattern of the four colours.
I have created the following code:
link2(A, Colour, B) :- link(A, Colour, B).
link2(A, Colour, B) :- link(B, Colour, A).
changecolour(blue,green).
changecolour(green,purple).
changecolour(purple,orange).
changecolour(orange,blue).
route(A, Colour1, B, List2) :-
link2(A, Colour1, B),
append([A], [B], List2).
route(A, Colour1, B, List2) :-
link2(A, Colour1, X),
changecolour(Colour1,Colour2),
append([A], List, List2),
\+ member(A, List),
route(X, Colour2, B, List).
For some reason, the code isn't working as expected and I'm not sure why. I have a feeling its something to do with the negation(not member) rule but can someone advise what I'm doing wrong?
maplist(dif(A), Ls)
to express, in a purely logical way, thatA
is not in the listLs
. – mat\+ member(A, List)
withmaplist(dif(A), List)
. – lurker