-- -- This file has been auto-generated by egison-translator. -- def station : Matcher String := string def price : Matcher Integer := integer def graph : Matcher [(String, [(String, Integer)])] := multiset (station, multiset (station, price)) def graphData : [(String, [(String, Integer)])] := [ ( "Berlin" , [("St. Louis", 14), ("Oxford", 2), ("Nara", 14), ("Vancouver", 13)] ) , ( "St. Louis" , [("Berlin", 14), ("Oxford", 12), ("Nara", 18), ("Vancouver", 6)] ) , ( "Oxford" , [("Berlin", 2), ("St. Louis", 12), ("Nara", 15), ("Vancouver", 10)] ) , ( "Nara" , [("Berlin", 14), ("St. Louis", 18), ("Oxford", 15), ("Vancouver", 12)] ) , ( "Vancouver" , [("Berlin", 13), ("St. Louis", 6), ("Oxford", 10), ("Nara", 12)] ) ] def trips : [(Integer, [String])] := matchAll graphData as graph with | (#"Berlin", ($s_1, $p_1) :: _) :: (loop $i (2, 4, _) (( #s_(i - 1) , ($s_i, $p_i) :: _ ) :: ...) (( #s_4 , ( #"Berlin" & $s_5 , $p_5 ) :: _ ) :: _)) -> (sum (map (\i -> p_i) (between 1 5)), s) def main (args: [String]) : IO () := do print "Route list:" each (compose show print) trips write "Lowest price:" print (show (min (map (\(x, y) -> x) trips)))