【问题标题】:max integer and min integer in standard ml标准 ml 中的最大整数和最小整数
【发布时间】:2012-04-09 06:18:00
【问题描述】:

我想使用 ml 中的最大整数和最小整数,但是我不能,我从库中看到它的 int 类型选项,我该如何使用它?我在这里看到了http://www.standardml.org/Basis/integer.html#SIG:INTEGER.minInt:VAL

我想用它来做一个 max 和 min 函数,每个方法都取一个整数列表,我必须分别返回 max 和 min。

我尝试了以下代码,但它们不起作用:

- fun max x = 
=   foldr (fn (a, b) => if a > b then a else b) INTEGER.minInt x;

- fun max x = 
=   foldr (fn (a, b) => if a > b then a else b) minInt x;

- fun max x = 
=   foldr (fn (a, b) => if a > b then a else b) Int.minInt x;

有人知道怎么用吗?

【问题讨论】:

    标签: types max option sml min


    【解决方案1】:

    Int.minIntInt.maxInt 的类型是 int option 而不是 int

    这意味着,如果没有最大值(或最小值),它们可以是 NONE 的形式,也可以是 SOME v 的形式,其中 v 是最大值(或最小值)。

    从选项中获取价值的方法有很多。

    • 模式匹配。
    • valOf,提取值。 (注意,如果给定NONE,则会引发异常)
    • getOpt,提取值,如果给定NONE,则使用默认值。

    但是,对于这个特定的问题,如果您对输入进行一些模式匹配,您可以在不需要Int.minInt 的情况下执行此操作。另外,请记住考虑输入列表为空的情况。

    【讨论】:

    • 我尝试使用模式匹配,将列表设为 x::xs,但它给了我匹配非详尽的警告,这可能是什么原因?
    • 新的乐趣是:fun max (x::xs) = foldr (fn (a, b) => if a > b then a else b) x (x::xs) ;
    • 记得考虑空列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2012-11-07
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多