操作员和操作员不同意无法找到原因

时间:2015-05-30 16:44:47

标签: sml ml

我正在处理此代码,无法使其运行。我已经检查了几次,仍然无法弄清楚它为什么不起作用。

fun date_to_string (date : (int * int * int)) =
  let
      val months = ["January", "February","March", "April",
                    "May", "June","July", "August", "September", "October", "November", "December"];
      fun get_nth (xs : string list, n : int) =
        if n=1
        then hd xs
        else get_nth(tl xs, n-1)
  in
      get_nth(months, Int.toString(#2 date)) ^ " " ^ Int.toString(#3 date) ^ ", " ^ Int.toString(#1 date)
  end

以下是我尝试运行时的回复:

enter image description here

1 个答案:

答案 0 :(得分:1)

当您看到表单错误时:

operator domain: <type1>
operand : <type2>

然后它说它期待<type1>类型的东西,但你给它类型为<type2>的东西。在您的情况下,get_nth期待一个元组,其中第一个元素是字符串列表,第二个元素是int。你提供了一个元组,其中第一个元素是一个字符串列表(这是正确的),但你的第二个参数是一个字符串,它应该是一个int。你想要改变

get_nth(months, Int.toString(#2 date))

get_nth(months, #2(date))