Rätsel in Prolog ?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rätsel in Prolog ?

    Habe folgende Aufgabe bekommen.

    Auf einen engen steilen Gebirkspass begegnen sich 4 Autos.
    Zwei Autos fahren Bergab und zwei Bergauf. Die Starße ist so
    eng, dass Zwei Autos nicht aneinader vorbeifahren können.
    Glücklicherweise befindet sich direkt am Treffpunkt eine
    Ausweichstelle, die genau ein Auto aufnehmen kann.
    In die Ausweichstelle kann aber nur vorwärts reingefahren und
    auch nur vorwärts wieder rausgefahren werden.


    Und habe dazu zurzeit dieses Programm geschrieben

    Quellcode

    1. nachunten(s(A,B,L,X,Y,Box),s(A2,B2,L2,X2,Y2,Box2)):-
    2. Box==leer,B==b,B2=Box,Box2=B,A2=A,L2=L,X2=X,Y2=Y;
    3. Box==leer,B==a,B2=Box,Box2=B,A2=A,L2=L,X2=X,Y2=Y;
    4. A\=leer,B==leer,A2=B,B2=A,L2=L,X2=X,Y2=Y,Box2=Box;
    5. B\=leer,L==leer,B2=L,L2=B,A2=A,X2=X,Y2=Y,Box2=Box;
    6. L\=leer,X==leer,L2=X,X2=L,A2=A,B2=B,Y2=Y,Box2=Box;
    7. X\=leer,Y==leer,X2=Y,Y2=X,A2=A,L2=L,B2=B,Box2=Box;
    8. X==leer,Box==a,X2=Box,Box2=X,A2=A,B2=B,L2=L,Y2=Y;
    9. X==leer,Box==b,X2=Box,Box2=X,A2=A,B2=B,L2=L,Y2=Y.
    10. nachoben(s(A,B,L,X,Y,Box),s(A2,B2,L2,X2,Y2,Box2)) :-
    11. X==x,Box==leer,X2=Box,Box2=X,A2=A,L2=L,B2=B,Y2=Y;
    12. X==y,Box==leer,X2=Box,Box2=X,A2=A,L2=L,B2=B,Y2=Y;
    13. B==leer,Box==x,B2=Box,Box2=B,A2=A,X2=X,L2=L,Y2=Y;
    14. B==leer,Box==y,B2=Box,Box2=B,A2=A,X2=X,L2=L,Y2=Y;
    15. Y\=leer,X==leer,Y2=X,X2=Y,A2=A,L2=L,B2=B,Box2=Box;
    16. X\=leer,L==leer,X2=L,L2=X,A2=A,B2=B,Y2=Y,Box2=Box;
    17. L\=leer,B==leer,L2=B,B2=L,A2=A,X2=X,Y2=Y,Box2=Box;
    18. B\=leer,A==leer,B2=A,A2=B,L2=L,X2=X,Y2=Y,Box2=Box.
    19. loese:-tiefensuche(s(a,b,leer,x,y,leer),s(x,y,leer,a,b,leer),[s(a,b,leer,x,y,leer)]),
    20. writeln(------------------------------------------------------),fail.
    21. ausgabe([]).
    22. ausgabe([Kopf|Rest]):- writeln(Kopf),ausgabe(Rest).
    23. tiefensuche(R,R,L) :-
    24. reverse(L,L2),ausgabe(L2),!.
    25. tiefensuche(Z1,Z3,L) :-
    26. nachunten(Z1,Z2),
    27. not(member(Z2,L)),
    28. tiefensuche(Z2,Z3,[Z2|L]);
    29. nachoben(Z1,Z2),
    30. not(member(Z2,L)),
    31. tiefensuche(Z2,Z3,[Z2|L]).
    Alles anzeigen



    Frage: Bekomme zwar Lösungswege, gerate aber in eine Endlosschleife !!

    Wie kann ich das so ändern, dass er alle möglichen Wege findet ???

    Kann mir bitte einer Helfen ???? :cry: :cry: