我是标准 ML 的新手,不知道为什么会出现这种类型不匹配错误:
fun number_in_month (month : int, dates : int list) =
if null dates
then 0
else if (month = (hd (tl (hd dates))))
then number_in_month(month, (tl dates)) + 1
else number_in_month(month, (tl dates))
评估此函数会导致以下错误:
Error: operator and operand don't agree [tycon mismatch]
5 operator domain: 'Z list
6 operand: int
7 in expression:
8 tl (hd dates)
但是,在 REPL,如果我执行以下操作:
val x = [[84, 12, 23], [83, 01, 18]]
12 = (hd (tl (hd x))) (* -> val it = true : bool *)
我不确定在这种情况下类型检查规则是什么,我不明白为什么相同的表达式会在 REPL 上起作用,但当我尝试评估函数中的子表达式时却不行。