diff --git a/exercises/compareTime.sml b/exercises/compareTime.sml index 4489c57..ec02261 100644 --- a/exercises/compareTime.sml +++ b/exercises/compareTime.sml @@ -1,4 +1,8 @@ -fun timeBefore((h1, m1, "AM"), (h2, m2, "AM")) = false; +fun timeBefore((h1, m1, "AM"), (h2, m2, "AM")) = + (h1 < h2) orelse (h1 = h2 andalso m1 < m2) + | timeBefore((h1, m1, "PM"), (h2, m2, "PM")) = + (h1 < h2) orelse (h1 = h2 andalso m1 < m2) + | timeBefore _ = false; timeBefore((1, 59, "AM"), (2, 40, "PM")) = true; timeBefore((1, 59, "PM"), (2, 40, "PM")) = true; diff --git a/exercises/fib.sml b/exercises/fib.sml index 705bab2..711f7bb 100644 --- a/exercises/fib.sml +++ b/exercises/fib.sml @@ -1,6 +1,8 @@ -fun fib(0) = 0 -| fib(1) = 1 -| fib(n) = fib(n-2) + fib(n-1); +fun fibr(a, b, 0) = a +| fibr(a, b, 1) = b +| fibr(a, b, count) = fibr(b, a+b, count-1); + +fun fib(n) = fibr(0, 1, n); fib(10) = 55; fib(8) = 21; diff --git a/exercises/max.sml b/exercises/max.sml index bed83eb..3780150 100644 --- a/exercises/max.sml +++ b/exercises/max.sml @@ -1,5 +1,6 @@ fun maxm [m] = m -| maxm(m::n::ns) = if m > n then maxm(m::ns) else maxm(n::ns); +| maxm(m::n::ns) = if m > n then maxm(m::ns) else maxm(n::ns) +| maxm([]) = 0; maxm([43,25,2,4,2434]); maxm([]); \ No newline at end of file diff --git a/exercises/prod.sml b/exercises/prod.sml index 8987833..a49e0b5 100644 --- a/exercises/prod.sml +++ b/exercises/prod.sml @@ -1,6 +1,9 @@ (* Make tail recursive *) -fun prod [] = 1 -| prod (n::ns) = n * (prod ns); + +fun prod l = prodr(l, 1); prod([2,3,4,5]) = 120; -prod([]) = 1; \ No newline at end of file +prod([]) = 1; + +fun prodr([], result) = result +| prodr ((n::ns), r) = prodr(ns, n+r); \ No newline at end of file diff --git a/exercises/validateDayMonth.sml b/exercises/validateDayMonth.sml index 609af5a..50fb264 100644 --- a/exercises/validateDayMonth.sml +++ b/exercises/validateDayMonth.sml @@ -1,2 +1,16 @@ (* Complete the expression *) -fun isValidDate(d, m) = true; \ No newline at end of file +fun isValidDate(d, m) = + case m of + "January" => d >= 1 andalso d <= 31 + | "February" => + | "March" => + | "April" => + | "May" => + | "June" => + | "July" => + | "August" => + | "September" => + | "October" => + | "November" => + | "December" => + | _ => false \ No newline at end of file