From e89ef72aac916bc66f08be5563d334123cc1d4c5 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 9 Feb 2015 20:22:32 +0100 Subject: week 2 camil --- week2/camil/StdT.icl | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 week2/camil/StdT.icl (limited to 'week2/camil/StdT.icl') diff --git a/week2/camil/StdT.icl b/week2/camil/StdT.icl new file mode 100644 index 0000000..1534c83 --- /dev/null +++ b/week2/camil/StdT.icl @@ -0,0 +1,38 @@ +/** + * Er is nog een probleem met fromString: deze geeft een onduidelijke warning bij het compileren (toInt geeft geen inline code). + * Verder wordt 5:a0 vrolijk gelezen als 5 minuten, 0 seconden, terwijl dit 0 minuten, 0 seconden zou moeten geven volgens de opgave. + * Ik weet niet zeker of dit een randgeval is waar de opgavemaker geen rekening mee heeft gehouden, of dat de code aangepast kan worden. + */ + +implementation module StdT + +import StdEnv + +:: T = {m :: Int, s :: Int} + +instance == T where == a b = a.m == b.m && a.s == b.s +instance < T where < a b = a.m < b.m || a.m == b.m && a.s < b.s + +instance zero T where zero = {m = zero, s = zero} +instance + T where + a b = fromInt (toInt a + toInt b) +instance - T where - a b = if (a < b) zero (fromInt (toInt a - toInt b)) + +instance toInt T where toInt a = a.m * 60 + a.s +instance fromInt T where fromInt n = if (n < 0) zero {m = n/60, s = n rem 60} + +instance toString T where + toString {m = x, s = 0} = toString x +++ ":00" + toString a = toString a.m +++ ":" +++ (if (a.s < 10) "0" "") +++ toString a.s +instance fromString T where + fromString s = if (s.[size s - 3] == ':') + {m = toInt (s % (0, size s - 4)), s = toInt (s % (size s - 2, size s - 1))} + zero + +Start :: (Bool, Bool, T, T, T, Int, String, T, T) +Start = (LOTR == Tea, Tea < LOTR, + zero + LOTR, LOTR + Tea, Tea - LOTR, + toInt LOTR, toString Tea, + fromString "5:40", fromString "foo") + +LOTR = {m=178, s=0} +Tea = {m=0,s=41} -- cgit v1.2.3