упражнение number_in_month (ошибка несоответствия Tycon в функции SML, которая пытается создать список) - PullRequest
0 голосов
/ 11 февраля 2020

(* Напишите функцию date_in_month, которая принимает список дат и месяца (т. Е. Int) и возвращает список, содержащий даты из списка аргументов дат, которые находятся в месяце. Возвращенный список должен содержать даты в порядок, в котором они были первоначально даны. *)

fun dates_in_months( datelist : (int*int*int) list, month : int) =
    if null(tl (datelist))
    then if #2(hd (datelist)) = month then #2(hd (datelist)) :: [] else []
    else if #2(hd (datelist)) = month
               then  #2(hd (datelist)) :: number_in_month(tl datelist, month)
               else  number_in_month(tl datelist, month)

Это ошибка, которую я получаю:

hw1.sml:55.22-55.78 Error: operator and operand do not agree [tycon mismatch]
  operator domain: int * int list
  operand:         int * int
  in expression:
    (fn {2=<pat>,...} => 2) (hd datelist) ::
      number_in_month (tl datelist,month)
val it = () : unit

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 11 февраля 2020

Нашел правильный путь:

fun dates_in_month(datelist : (int*int*int) list, month : int) =
    if null(tl (datelist))
    then if #2(hd (datelist)) = month
         then (hd (datelist)) :: []
         else []
    else if #2(hd (datelist)) = month
         then  (hd (datelist)) :: dates_in_month(tl datelist, month)
         else  dates_in_month(tl datelist, month)  

У меня было несколько fl aws, я вызывал функцию, из которой скопировал код, вместо самой функции + некоторые другие проблемы с синтаксисом. Кроме того, я добавил в список только элемент month из кортежа даты.

...