SML中参数的变量类型

时间:2014-03-30 02:10:20

标签: list types sml

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非常陌生(上周刚刚开始学习它),并且已经搜索了答案而无法想出任何答案。

2 个答案:

答案 0 :(得分:2)

如果您将第一行更改为

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

那么它会按照你的意愿行事。这里''a是一个相等类型变量,可以代表支持=运算符的任何类型。

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

答案 1 :(得分:0)

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

fun square x = x*x

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

重点是只有一个功能高清。但是运算符*可以指两个完全不同的函数。