Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (* Assignment #1 *)
- type DATE = (int * int * int)
- exception InvalidParameter
- (* This file is where your solutions go *)
- fun is_older(d1: DATE, d2: DATE): bool =
- if (d1 = d2)
- then false
- else (
- if (#1 d1 < #1 d2)
- then true
- else (
- if (#2 d1 < #2 d2 andalso #1 d1 = #1 d2)
- then true
- else (
- if (#3 d1 < #3 d2 andalso #2 d1 = #2 d2 andalso #1 d1 = #1 d2)
- then true
- else (
- false
- )
- )
- )
- )
- fun number_in_month(dates: DATE list, month: int) =
- if null dates
- then 0
- else (
- let
- val hddate = hd(dates)
- in
- if (#2 hddate = month)
- then 1 + number_in_month(tl(dates), month)
- else number_in_month(tl(dates), month)
- end
- )
- fun number_in_months(dates: DATE list, months: int list) =
- if null dates
- then 0
- else (
- let
- fun int_in_list(num: int, l: int list): bool =
- if null l
- then false
- else (
- if (hd(l) = num)
- then true
- else int_in_list(num, tl(l))
- )
- val hddate = hd(dates)
- in
- if (int_in_list(#2 hddate, months))
- then 1 + number_in_months(tl(dates), months)
- else number_in_months(tl(dates), months)
- end
- )
- fun dates_in_month(dates: DATE list, month: int): DATE list =
- if null dates
- then []
- else (
- let
- val hddate = hd(dates)
- in
- if (#2 hddate = month)
- then hddate :: dates_in_month(tl(dates), month)
- else dates_in_month(tl(dates), month)
- end
- )
- fun dates_in_months(dates: DATE list, months: int list): DATE list =
- if null dates
- then []
- else (
- let
- fun int_in_list(num: int, l: int list): bool =
- if null l
- then false
- else (
- if (hd(l) = num)
- then true
- else int_in_list(num, tl(l))
- )
- val hddate = hd(dates)
- in
- if (int_in_list(#2 hddate, months))
- then hddate :: dates_in_months(tl(dates), months)
- else dates_in_months(tl(dates), months)
- end
- )
- fun get_nth(strings: string list, n: int): string =
- if (n = 0 orelse n > length strings)
- then raise InvalidParameter
- else (
- if (n = 1)
- then hd(strings)
- else get_nth(tl(strings), n - 1)
- )
- fun date_to_string(d: DATE): string =
- get_nth(["January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"], #2 d) ^ " " ^ Int.toString(#3 d) ^ ", " ^ Int.toString(#1 d)
- fun number_before_reaching_sum(sum: int, ints: int list) =
- if (null ints)
- then 0
- else (
- if (sum - hd(ints) > 0)
- then 1 + number_before_reaching_sum(sum - hd(ints), tl(ints))
- else number_before_reaching_sum(sum - hd(ints), tl(ints))
- )
- fun what_month(day: int) =
- number_before_reaching_sum(day, [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) + 1
- fun month_range(day1: int, day2: int): int list =
- if (day1 > day2)
- then []
- else what_month(day1) :: month_range(day1 + 1, day2)
- fun oldest(dates: DATE list): DATE option =
- NONE;
- fun reasonable_date(date: DATE): bool = false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement