2012-10-02 169 views
0

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

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

但它绝对不行。我也尝试了如果n在int中。

任何帮助?

回答

2

你不能这样做。

该类型系统根本不允许一个函数采用多种不同的类型,并根据它的类型采取行动。您的功能要么需要int,要么需要real。 (或者它需要两个,但也可以采取string S,list S,等等即是多态)

你可以伪造它通过使数据类型,它封装值即可以是整数或实数,如所以:

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