1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Prolog - flights

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von whasabi, 11. Januar 2014.

  1. whasabi

    whasabi Grünschnabel

    Hallo Ich hab mal wieder eine Frage
    Also ich habe diesen Code bekommen [ganzer Code unten] und muss nun am Dienstag von London wegfliegen und am Freitag wieder in London landen und dazwischen muss ich durch Mialno, Ljubljana und Zürich fliegen. Und jeden Tag kann man nur einmal fliegen

    Ich habe es nun mit
    Code (Text):
    1. travel0(london,london,tue,fri,[zurich,milano,ljubljana]).
    versucht
    aber es kommt immer nur false
    was mach ich falsch? denn
    Code (Text):
    1. travel0(City1,City2,Day,Arrival1,[City1-City3:Flight1:Departure1|Residual]):-
    2. flight(City1,City3,Day,Flight1,Departure1,Arrival3),
    3. possibleTransfer(Arrival1,Departure1),
    4. travel0(City3,City2,Day,Arrival3,Residual).
    City1 = London
    City 2= London
    Day = Tue
    Arrival = Fri
    City1-City3 = [Milano, Zürich, Ljubiljana]

    oder hab ich da jz iwas falsch verstanden****? verzweifel schon langsam :(

    Code (Text):
    1. % flights.pl:
    2. :-op(50,xfy,:).
    3. timeTable(edinburgh,london,
    4. [9:40/10:50/ba4733/daily,
    5. 13:40/14:50/ba4753/daily, 19:40/20:50/ba4833/[mon,tue,wed,thu,fri,sun]]).
    6. timeTable(london,edinburgh,
    7. [9:40/10:50/ba4732/daily, 11:40/12:50/ba4752/daily, 18:40/19:50/ba4822/[mon,tue,wed,thu,fri]]).
    8. timeTable(london,ljubljana,
    9. [13:20/16:20/sa201/[fri], 13:20/16:20/sa213/[sun]]).
    10. timeTable(ljubljana,london,
    11. [11:10/12:20/sa200/[fri], 11:25/12:20/sa212/[sun]]).
    12. timeTable(london,zurich,
    13. [9:10/11:45/ba510/daily, 14:45/17:20/sr459/daily]).
    14. timeTable(zurich,london,
    15. [9:00/9:40/ba613/[mon,tue,wed,thu,fri,sat], 16:10/16:55/sr806/[mon,tue,wed,thu,fri,sun]]).
    16. timeTable(london,milano,
    17. [8:30/11:20/ba510/daily, 11:00/13:50/az459/daily]).
    18. timeTable(milano,london,
    19. [9:10/10:00/az458/daily, 12:20/13:10/ba511/daily]).
    20. timeTable(ljubljana,zurich,
    21. [11:30/12:40/sa322/[tue,thu]]).
    22. timeTable(zurich,ljubljana,
    23. [13:30/14:40/sa323/[tue,thu]]).
    24. timeTable(zurich,milano,
    25. [7:55/8:45/sr620/daily]).
    26. timeTable(milano,zurich,
    27. [9:25/10:15/sr621/daily,
    28. 12:45/13:35/sr623/daily]).
    29.  
    30. flight(City1,City2,Day,Flight,Departure,Arrival):-
    31. timeTable(City1,City2,TimeTable),
    32. member(Departure/Arrival/Flight/DayTimeTable,TimeTable),
    33. dayOfFlight(Day,DayTimeTable).
    34.  
    35. dayOfFlight(Day,daily):-
    36. member(Day,[mon,tue,wed,thu,fri,sat,sun]).
    37. dayOfFlight(Day,List):-
    38. member(Day,List).
    39.  
    40. travel(City1,City2,Day,Letovi):-
    41. travel0(City1,City2,Day,0:0,Letovi).
    42.  
    43. % Arrival1 contains the time of arrival in City1;
    44. % it limits the no. of flights with which one can continue travelling
    45. travel0(City1,City2,Day,Arrival1,[City1-City2:Flight:Departure1]):-
    46. flight(City1,City2,Day,Flight,Departure1,_),
    47. possibleTransfer(Arrival1,Departure1).
    48.  
    49. travel0(City1,City2,Day,Arrival1,[City1-City3:Flight1:Departure1|Residual]):-
    50. flight(City1,City3,Day,Flight1,Departure1,Arrival3),
    51. possibleTransfer(Arrival1,Departure1),
    52. travel0(City3,City2,Day,Arrival3,Residual).
    53.  
    54. timeOfDeparture([_-_:_:Departure|_],Departure).
    55.  
    56. possibleTransfer(Hour1:Minute1,Hour2:Minute2):-
    57. 60*(Hour2-Hour1)+Minute2-Minute1>=40.
    58.  
    59. member(X,[X|_]).member(X,[_|Rest]):-
    60. member(X,Rest).
     
  2. deepthroat

    deepthroat Erfahrenes Mitglied

    Hi.
    Ja, da hast du was falsch verstanden. Du müßtest zu allererst mal das vorgegebene Listenformat einhalten.

    Ein Element der Liste soll aus City1 <Bindestrich> City2 <Doppelpunkt> Flight <Doppelpunkt> Departure bestehen. M.a.W. man kann nicht einfach nur ein Atom wie "london" angeben.

    Dann ist m.M.n. das travel0 nur ein Hilfsprädikat, das travel Prädikat ist was du verwenden müßtest:
    Code (Text):
    1. | ?- travel(london, london, tue, X).
    2.  
    3. X = [london-edinburgh:ba4732:9:40,edinburgh-london:ba4753:13:40]  ;
    4.  
    5. X = [london-edinburgh:ba4732:9:40,edinburgh-london:ba4833:19:40]
    6.  
    7.  ...
    Das Prädikat ermittelt alle Routen von City1 nach City2. Im einfachsten Fall würde man bswp. nach Edingburgh und zurück fliegen. Du müßtest jetzt noch weitere Einschränkungen definieren (nur 1 Flug pro Tag und Besuch aller Städte).
     
  3. whasabi

    whasabi Grünschnabel

    Danke für die Antwort
    leider weiß ich nur, wie ich eben mit travel von einer stadt zur nächsten fliege, aber wie kann ich es machen, dass man davor noch durch die anderen Städte fliegt (und ich ja eigentlich nicht die Reihenfolge der Städte aussuche)?
    Da häng ich jetzt :/
    sonst könnt ich ja travel(london,milano,tue,X). travel(milano, zurich, wen, X). usw machen aber das ist ja doch falsch ...
     
  4. deepthroat

    deepthroat Erfahrenes Mitglied

    Du müßtest halt am Dienstag von London aus Irgendwo hinfliegen, am Mittwoch von dort Irgendwoanders hin, am Do von dort wieder Woanders hin und am Fr. von dort wieder zurück nach London.

    Dann formulierst du noch weitere Bedinungen, so das Irgendwo, Irgendwoanders und Woanders Milan, Zürich und Ljubljana (in beliebiger Reihenfolge) sein müssen.
     
Die Seite wird geladen...