无论如何要将这两个函数结合起来,这些函数采用列表并返回最高和最低元素。想要同时输出两个。干杯
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;
答案 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