【问题标题】:Is there a inbuilt function to check if a number is integer in SML是否有内置函数来检查 SML 中的数字是否为整数
【发布时间】:2012-10-21 23:04:57
【问题描述】:

sml 中有内置的整数函数吗?

我的意思是这样的:

我必须从文件中读取一个数字,如果它是整数则将其显示为输出,如果该数字不是整数则引发异常。例如,我必须检查 (Int.fromString()) 的输出是否为整数,如果是则显示它...(重复上面)

【问题讨论】:

  • 你到底想要什么?如果该双精度没有小数部分,则该函数采用双精度并返回true?请注意,对于大型双打来说,这不是很准确。还是一个接受 int 并始终返回 true 的函数?这没有多大意义。

标签: sml smlnj


【解决方案1】:

类型系统将确保给定函数的值的类型与函数的类型签名相匹配。

也就是说,如果你有一个以整数作为输入的函数,比如

fun double n = 2 * n
(* this function has type: int -> int *)

那么n 将永远是一个整数。除了整数之外,无法调用该函数;它会给出一个类型错误。

如果你有一个多态函数,比如

fun pair n = (n, n)
(* this function has type: 'a -> 'a * 'a *)

那么您在运行时无法知道输入的类型。所有类型的输入都将被同等对待。

但是,您始终可以通过在定义函数时明确类型来将多态函数限制为仅适用于给定类型:

fun pairInt (n : int) = (n, n)
(* this function has type: int -> int * int *)

您可以通过比较调用pair 5pairInt 5 以及调用pair "foo"pairInt "foo" 得到的结果来了解pairpairInt 之间的区别。


如果您有int option,例如您尝试使用Int.fromStringstring 转换为int,您可以通过多种方式提取int。具体怎么做,请参考问题“In smlnj how do you convert “string option” to “string”?”。

【讨论】:

  • 我必须从文件中读取一个数字,如果它是整数则将其显示为输出,如果该数字不是整数则引发异常。例如,我必须检查 (Int.fromString()) 的输出是否为整数,如果是则显示它...(重复上面)。
  • @user1710036:我建议您更新您的问题以反映这一点。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2011-07-27
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多