1

我是 ML 的新手,我很难尝试提取整数数组的最小值或最大值。
我已经使用从整数列表创建了数组Array.fromList

提示可能非常有用,因为 hd 或 tl 等函数不适用于数组

4

2 回答 2

4

如前所述,您在 SML 中具有基本相同的功能。
在处理数组而不是列表时,您必须使用将数组而不是列表作为输入的函数。有点不言而喻。

基本上,如果它是一个常规列表,您可以用同样的方式解决问题。但是,您只需要使用 Array 模块中的折叠功能。与常规列表不同,我们无法对它们进行模式匹配以将其分解为第一个元素和列表的其余部分,因此我们必须通过sub函数选择第一个元素。为了确保列表中有元素,您可以使用比较length数组的测试来包装它。

fun min_arr arr = Array.foldl Int.min (Array.sub (arr, 0)) arr


- val a = Array.fromList [5,76,2,6,8,2,3,7,81,3];
val a = [|5,76,2,6,8,2,3,7,81,3|] : int array
- min_arr a;
val it = 2 : int

要查找列表中最大的元素,您可以将Int.min函数与Int.max.

于 2013-05-07T15:39:10.660 回答
3

在 OCaml 中:

let min_array arr = Array.fold_left min arr.(0) arr

此代码arr.(0)用作最小值的初始候选者,如果数组为空则失败,因此您可能需要检查它或使用始终大于实际最小值的特定于域的初始候选者(我个人很警惕max_int在这些情况下使用)。

我看到 SML 有一个foldl允许做同样事情的功能。我会让你根据需要调整语法。

于 2013-05-07T15:27:27.420 回答