----------------------------------------- -- Programm "Routenberechnung" -- ----------------------------------------- module Route where import System -- stellt getArgs :: IO [String] bereit ------------------------ -- Die Hauptfunktion -- ------------------------ main :: IO () main = do ... {- readArguments :: IO (Town,Town,String) readRoads :: String -> IO [Road] route :: [Road] -> Town -> Town -> Route formatRoute :: Route -> String -} ----------------------------------------------------- -- Teilschritt 1: Einlesen der Argumente -- ----------------------------------------------------- -- vordefiniert in Bibliothek System -- getArgs :: IO [String] type Town = String readArguments :: IO (Town,Town,String) readArguments = do ... ----------------------------------------------- -- Teilschritt 2: Einlesen der Straßeninfos -- ----------------------------------------------- type Road = (Town,Town,Int) readRoads :: String -> IO [Road] readRoads dat = do ... ----------------------------------------------- -- Teilschritt 3: Formatierung der Ausgabe -- ----------------------------------------------- type Route = (Town, Town, Int, [(Town,Int)]) -- von - nach - Laenge - Verlauf formatRoute :: Route -> String formatRoute (from, to, dist, stages) = ... ---------------------------------------------------- -- Teilschritt 4: Berechnung der kürzesten Route -- ---------------------------------------------------- route :: [Road] -> Town -> Town -> Route route roads from to ... startP, endP :: Road -> Town startP (from, to, dist) = from endP (from, to, dist) = to better :: Route -> Route -> Route better r1@(from1,to1,dist1,stages1) r2@(from2,to2,dist2,stages2) ... where lr1 = length stages1 lr2 = length stages2 best :: [Route] -> Route ... joinRoutes :: Route -> Route -> Route ... road2Route :: Road -> Route ... bothWays :: [Road] -> [Road] ... -- Routenverfolgung zu Debugging-Zwecken debugmain :: Town -> Town -> String -> IO () debugmain from to datei = do -- (from,to,datei) <- readArguments roads <- readRoads datei putStr $ unlines $ map show (debugroute roads from to) debugroute :: [Road] -> Town -> Town -> [Road] debugroute roads from to | from == to = [] debugroute roads from to = concat [road : debugroute roads (endP road) to | road <- bothWays roads, startP road == from]