TEKNILLINEN KORKEAKOULU Tietojenkäsittelyopin laboratorio Logiikkaohjelmointi Tik-76.144 SYKSY 1998 Henna Pietiläinen Ti 45356D 4.a. flight(helsinki, hampuri, fl001). flight(hampuri, frankfurt, fl002). flight(frankfurt, pariisi, fl003). flight(frankfurt, milano, fl004). flight(frankfurt, berliini, fl005). flight(milano, hampuri, fl006). flight(hampuri, pariisi, fl007). flight(pariisi, madrid, fl008). flight(pariisi, frankfurt, fl009). flight(madrid, lontoo, fl010). flight(helsinki, lontoo, fl011). flights(Src, Mid, Dest, Route):- flightseq(Src, Mid, Route1, []), flightseq(Mid, Dest, Route2, Route1), append(Route1, Route2, Route). flightseq(Src, Dest, [Route], List):- flight(Src, Dest, Route), legal(Route, List). flightseq(Src, Dest, [H|T], List):- flight(Src, D, H), legal(H, List), flightseq(D, Dest, T, [H|List]). legal(_, []). legal(Route, [X | Y]) :- Route \== X, legal(Route, Y). append([], List, List). append([H | T], List, [H | X]) :- append(T, List, X). 4.b. Ohjelman avulla lyhyimmäksi reitiksi saadaan: | ?- flights(helsinki, pariisi, lontoo, X). X = [fl001,fl007,fl008,fl010] ? Eli reitti kulkee Helsinki-Hampuri Hampuri-Pariisi Pariisi-Madrid Madrid-Lontoo. Kun taas sihteerin ratkaisu oli: fl001, fl002, fl004, fl006, fl007, fl008, fl010. Sihteerin reitti on pidempi sillä se kulkee Helsinki-Hampuri Hampuri-Frankfurt Frankfurt-Milano Milano-Hampuri Hampuri-Pariisi Pariisi-Madrid Madrid-Lontoo. Eli se kiertää turhaan Hampurista Frankfurtin ja Milanon kautta takaisin Hampuriin.