2014-03-30 54 views
1
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) 

这就是我的代码目前的样子,它只是返回true,如果x出现在y列表中,则返回true,否则返回false。问题是我希望它能够输入“a”和[“a”,“b”,“c”],或者甚至有x是列表,y是列表的列表。我非常新到ML(上周刚刚开始了解它),并且已经寻找答案并且不能提出任何问题。SML参数的变量类型

+0

注意:'如果A然后假别别B'只是说'不是A和B'的复杂方式,同样,'如果A然后是真的其他B'就是'A orelse B'。所以你的代码可以写成'not(null y)andalso(x = hd y orelse in_list(x,tl y))''。 –

回答

2

如果更改第一行

fun in_list (x : ''a, y : ''a list) = 

那么它会表现为你想要的。这里''a是一个相等类型的变量,它可以代表任何支持=运算符的类型。

您也可以完全忽略这些类型,并推断出最一般的正确类型。

0

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

fun square x = x*x 

,因为x的类型可以是int或real。 (它会默认为int,也许不是你想要的。)

问题是只有一个函数hd。但是运营商*可以参考两个完全不同的功能。