检查输入是否为整数

时间:2012-10-02 10:07:12

标签: sml smlnj

我想要求用户输入变量并检查它是实数还是整数,并对相应的操作采取两种不同的操作。如果整数为false,则为true;

fun realorinteger(n)= if n = int then true else false;

但它肯定不起作用。我也尝试过int in int。

任何帮助?

1 个答案:

答案 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);