SML将两个函数(min,max)合并为一个(范围)

时间:2017-03-08 18:25:49

标签: list range sml

无论如何要将这两个函数结合起来,这些函数采用列表并返回最高和最低元素。想要同时输出两个。干杯

fun max[] = raise Empty 
    max[x] = x
    max(x::xs) =
  let 
    val y = max xs
  in
    if x > y then x else y
  end;

fun min[] = raise Empty 
  min[x] = x
  min(x::xs) =
     let 
       val y = min xs
     in
       if x < y then x else y
  end;

2 个答案:

答案 0 :(得分:1)

这是一个提示。使用相同的基本逻辑。编写函数minmax以返回形式为(min,max)的一对值,然后在递归步骤中,使用模式匹配来提取这两个值。模板将是:

fun minmax [] = raise Empty
|   minmax [x] = (x,x)
|   minmax (x::xs) =
  let 
    val (a, b) = minmax xs
  in
    <fill in the code>
  end;

在上面的a中,最小值为b,最大值为a。根据{{​​1}}和b以及第三个值x,返回(x,b)(a,x)(a,b),具体取决于不等式如何发挥作用。您需要多个if

答案 1 :(得分:1)

这是一个不同的提示:使用存储当前(最小,最大)的辅助函数,并在完成迭代时返回那些。该模板将是:

fun minmax [] = raise Empty
  | minmax (y::ys) =
    let fun helper [] (min, max) = ...
          | helper (x::xs) (min, max) = ...
    in helper ys (y, y) end