список на языке SML - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в SML и пытаюсь запустить код из github в SML / NJ. В настоящее время я пытаюсь вызвать функцию

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

вот так

dates_in_month(3::2::1::nil, 5)

, но получаю следующее сообщение об ошибке на SML / NJ 110.97

stdIn:8.1-8.31 Error: operator and operand do not agree [overload - bad instantiation]
  operator domain: (int * int * int) list * int
  operand:         'Z[INT] list * 'Y[INT]
  in expression:
    dates_in_month (3 :: 2 :: <exp> :: <exp>, 5)

1 Ответ

0 голосов
/ 08 мая 2020

Эта проблема возникает из-за того, что вы сейчас пытаетесь вызвать функцию типа (int * int * int) list * int -> (int * int * int) list с параметром типа int list * int. То есть первый элемент вашего кортежа имеет неправильный тип.

Вместо этого вам нужен список из трех кортежей int. Вы можете построить его так:

(1, 2, 3) :: (4, 5, 6) :: nil

или немного короче, как

[(1, 2, 3), (4, 5, 6)]

Обратите внимание, что здесь элементы списка представляют собой 3-кортежи из int, а не просто int как и раньше.

...