Advertisement
Guest User

Untitled

a guest
Feb 2nd, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (*  Assignment #1 *)
  2.  
  3. type DATE = (int * int * int)
  4. exception InvalidParameter
  5.  
  6. (* This file is where your solutions go *)
  7.  
  8. fun is_older(d1: DATE, d2: DATE): bool =
  9.     if (d1 = d2)
  10.     then false
  11.     else (
  12.         if (#1 d1 < #1 d2)
  13.         then true
  14.         else (
  15.             if (#2 d1 < #2 d2 andalso #1 d1 = #1 d2)
  16.             then true
  17.             else (
  18.                 if (#3 d1 < #3 d2 andalso #2 d1 = #2 d2 andalso #1 d1 = #1 d2)
  19.                 then true
  20.                 else (
  21.                     false
  22.                     )
  23.                 )
  24.             )
  25.         )
  26.  
  27. fun number_in_month(dates: DATE list, month: int) =
  28.     if null dates
  29.     then 0
  30.     else (
  31.         let
  32.             val hddate = hd(dates)
  33.         in
  34.             if (#2 hddate = month)
  35.             then 1 + number_in_month(tl(dates), month)
  36.             else number_in_month(tl(dates), month)
  37.         end
  38.         )
  39.  
  40. fun number_in_months(dates: DATE list, months: int list) =
  41.     if null dates
  42.     then 0
  43.     else (
  44.         let
  45.             fun int_in_list(num: int, l: int list): bool =
  46.                 if null l
  47.                 then false
  48.                 else (
  49.                     if (hd(l) = num)
  50.                     then true
  51.                     else int_in_list(num, tl(l))
  52.                     )
  53.             val hddate = hd(dates)
  54.         in
  55.             if (int_in_list(#2 hddate, months))
  56.             then 1 + number_in_months(tl(dates), months)
  57.             else number_in_months(tl(dates), months)
  58.         end
  59.         )
  60.  
  61. fun dates_in_month(dates: DATE list, month: int): DATE list =
  62.     if null dates
  63.     then []
  64.     else (
  65.         let
  66.             val hddate = hd(dates)
  67.         in
  68.             if (#2 hddate = month)
  69.             then hddate :: dates_in_month(tl(dates), month)
  70.             else dates_in_month(tl(dates), month)
  71.         end
  72.         )
  73.  
  74. fun dates_in_months(dates: DATE list, months: int list): DATE list =
  75.     if null dates
  76.     then []
  77.     else (
  78.         let
  79.             fun int_in_list(num: int, l: int list): bool =
  80.                 if null l
  81.                 then false
  82.                 else (
  83.                     if (hd(l) = num)
  84.                     then true
  85.                     else int_in_list(num, tl(l))
  86.                     )
  87.             val hddate = hd(dates)
  88.         in
  89.             if (int_in_list(#2 hddate, months))
  90.             then hddate :: dates_in_months(tl(dates), months)
  91.             else dates_in_months(tl(dates), months)
  92.         end
  93.         )
  94.  
  95. fun get_nth(strings: string list, n: int): string =
  96.     if (n = 0 orelse n > length strings)
  97.     then raise InvalidParameter
  98.     else (
  99.         if (n = 1)
  100.         then hd(strings)
  101.         else get_nth(tl(strings), n - 1)
  102.         )
  103.  
  104. fun date_to_string(d: DATE): string =
  105.     get_nth(["January",
  106.             "February",
  107.             "March",
  108.             "April",
  109.             "May",
  110.             "June",
  111.             "July",
  112.             "August",
  113.             "September",
  114.             "October",
  115.             "November",
  116.             "December"], #2 d) ^ " " ^ Int.toString(#3 d) ^ ", " ^ Int.toString(#1 d)
  117.  
  118. fun number_before_reaching_sum(sum: int, ints: int list) =
  119.     if (null ints)
  120.     then 0
  121.     else (
  122.         if (sum - hd(ints) > 0)
  123.         then 1 + number_before_reaching_sum(sum - hd(ints), tl(ints))
  124.         else number_before_reaching_sum(sum - hd(ints), tl(ints))
  125.         )
  126.  
  127. fun what_month(day: int) =
  128.     number_before_reaching_sum(day, [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) + 1
  129.  
  130. fun month_range(day1: int, day2: int): int list =
  131.     if (day1 > day2)
  132.     then []
  133.     else what_month(day1) :: month_range(day1 + 1, day2)
  134.  
  135. fun oldest(dates: DATE list): DATE option =
  136.     NONE;
  137.  
  138. fun reasonable_date(date: DATE): bool = false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement