List SML中参数的变量类型

List SML中参数的变量类型,list,types,sml,List,Types,Sml,这就是我的代码目前的样子,如果x出现在y列表中,它只返回true,否则返回false。问题是我希望它能够同时输入“a”和[“a”、“b”、“c”],甚至让x是一个列表,y是一个列表。我对ML很陌生(上周才开始学习),一直在寻找答案,但什么都想不出来。如果您将第一行改为 fun in_list (x : int, y : int list) = if null y then false else if x=hd y then true else in_list(x,tl y) 然后它将按照您的意

这就是我的代码目前的样子,如果x出现在y列表中,它只返回true,否则返回false。问题是我希望它能够同时输入“a”和[“a”、“b”、“c”],甚至让x是一个列表,y是一个列表。我对ML很陌生(上周才开始学习),一直在寻找答案,但什么都想不出来。

如果您将第一行改为

fun in_list (x : int, y : int list) =
if null y
then false
else if x=hd y then true
else in_list(x,tl y)
然后它将按照您的意愿运行。这里的
”a
是一个等式类型变量,可以代表支持
=
运算符的任何类型


您也可以完全省略这些类型,然后将推断出最一般的正确类型。

类型在函数声明中总是可以省略,只有一个例外:运算符重载可能导致歧义。例如

fun in_list (x : ''a, y : ''a list) =
因为x的类型可以是int或real。(它将默认为int,可能不是您想要的。)


关键是只有一个函数hd。但是操作符*可以引用两个完全不同的函数。

注意:
如果A那么false else B
只是表示
不是A和也不是B
的一种复杂方式,同样地,
如果A那么true else B
就是
A或else B
。因此,您的代码可以被写入
not(null y)和also(x=hdy或列表中的lse(x,tly))
fun square x = x*x