我想要求用户输入一个变量并检查它是实数还是整数,并对相应的操作进行两种不同的操作。如果整数为假,则为真;否则为假;
fun realorinteger(n)= if n=int then true else false;
但这绝对行不通。我也试过 if n in int 。
有什么帮助吗?
你不可以做这个。
类型系统根本不允许一个函数采用多种不同的类型,并根据它是哪种类型来操作。您的函数需要一个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 *)
然后,此函数将具有 type 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);