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非常陌生(上周刚刚开始学习它),并且已经搜索了答案而无法想出任何答案。
答案 0 :(得分:2)
如果您将第一行更改为
fun in_list (x : ''a, y : ''a list) =
那么它会按照你的意愿行事。这里''a
是一个相等类型变量,可以代表支持=
运算符的任何类型。
您也可以完全忽略这些类型,并推断出最常用的正确类型。
答案 1 :(得分:0)
在函数声明中总是可以省略类型,只有一个例外:运算符重载可能导致歧义。一个例子是
fun square x = x*x
因为x的类型可以是int或real。 (它将默认为int,可能不是你想要的。)
重点是只有一个功能高清。但是运算符*可以指两个完全不同的函数。