我想要求用户输入变量并检查它是实数还是整数,并对相应的操作采取两种不同的操作。如果整数为false,则为true;
fun realorinteger(n)= if n = int then true else false;
但它肯定不起作用。我也尝试过int in int。
任何帮助?
答案 0 :(得分:2)
你不能这样做。
类型系统根本不允许函数采用多种不同的类型,并根据它的类型来执行操作。您的函数需要int
,或者需要real
。 (或者它需要两者,但也可以采用string
s,list
等等...即。是多态的
你可以通过创建一个数据类型来伪造它,它封装了可以是整数或实数的值,如下所示:
datatype intorreal = IVal of int | RVal of real
然后,您可以在此类值上使用模式匹配来提取所需的数字:
fun realorinteger (IVal i) = ... (* integer case here *)
| realorinteger (RVal r) = ... (* real case here *)
此函数的类型为intorreal -> x
,其中x
是右侧表达式的类型。注意,在两种情况下,结果值必须是相同的类型。
这种功能的一个例子可能是舍入函数:
fun round (IVal i) = i
| round (RVal r) = Real.round r
然后如下调用:
val roundedInt = round (IVal 6);
val roundedReal = round (RVal 87.2);