Sml 检查输入是否为整数的实数

Sml 检查输入是否为整数的实数,sml,smlnj,Sml,Smlnj,我想让用户输入一个变量,检查它是实数还是整数,并对相应的操作执行两种不同的操作。如果整数为false,则说true fun realorinteger(n)=如果n=int,则为true,否则为false 但它肯定不起作用。我也尝试了int中的if n 有什么帮助吗?您不能这样做 类型系统根本不允许一个函数采用多种不同的类型,并根据其类型进行操作。您的函数要么采用int,要么采用real。(或者两者都需要,但也可以使用strings、lists等…即是多态的) 您可以通过创建数据类型来伪造它,该

我想让用户输入一个变量,检查它是实数还是整数,并对相应的操作执行两种不同的操作。如果整数为false,则说true

fun realorinteger(n)=如果n=int,则为true,否则为false

但它肯定不起作用。我也尝试了int中的if n

有什么帮助吗?

您不能这样做

类型系统根本不允许一个函数采用多种不同的类型,并根据其类型进行操作。您的函数要么采用
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);