Search code examples
prologreverse

Reverse the output of the Depth-First-Search Algorithm


I want to reverse the output of the code.

goal(hall).
move(gateA,gateB).
move(gateA,gateG).
move(gateB,gateC).
move(gateB,gateH).
move(gateG,gateL).
move(gateG,gateF).
move(gateL,gateS).
move(gateC,gateD).
move(gateH,gateO).
move(gateD,gateI).
move(gateD,gateJ).
move(gateI,gateP).
move(gateP,gateQ).
move(gateJ,gateR).
move(gateR,hall).




goSolveTheMaze( Start, Goal)  :-
  depthfirst( [], Start, Goal).



depthfirst( Path, Start, [Start | Path] )  :-
   goal( Start).

depthfirst( Path,Start, Hall)  :-
  move( Start, Node1),
  depthfirst( [Start | Path], Node1, Hall).

The output is :

?- goSolveTheMaze(gateA,Hall).
Hall = [hall, gateR, gateJ, gateD, gateC, gateB, gateA] .

I want it to be : Hall =[gateA ,gateB ,gateC ,gateD ,gateJ ,gateR ,hall].

I tried to use the reverse function like this :

    reverse([])     --> [].
    reverse([Goal|Ls]) --> reverse(Ls), [Goal].

 
But it didn't work.

Solution

  • goSolveTheMaze(Start, Path) :-
        depthfirst(Start, Path).
    
    depthfirst(Goal, [Goal]) :-
       goal(Goal).
    
    depthfirst(Start, [Start|Path])  :-
        move(Start, Node1),
        depthfirst(Node1, Path).
    

    Result in swi-prolog:

    ?- goSolveTheMaze(gateA, Path).
    Path = [gateA,gateB,gateC,gateD,gateJ,gateR,hall] ;
    false.