如何解决了解函数
这个函数是做什么的?
let minium (l: int list) :int option =
begin match l with
| [] -> None
| x::rest -> Some (fold min x rest)
end
我认为它接受一个 int 列表,遍历所有元素,并返回最小值。是吗?
解决方法
begin 和 end 语句是多余的。这是代码的清理版本。
let minimum (l: int list) : int option =
match l with
| [] -> None
| x::rest -> Some (List.fold_left min x rest)
我将介绍代码将对整数列表执行的操作。
如果整数列表是空列表,[]
它将返回 None。如果没有列表,则没有最小值。
让我们评估一个示例列表,lst = [1;2;3;4;5]
。
minimum lst
≡ Some (List.fold_left min 1 [2;3;4;5]
你可以在这里查看 List.fold_left 的实现:
let rec fold_left (f : 'a -> 'b ->'a) (acc : 'a) (l : 'b list): 'a =
match l with
[] -> acc
| x :: rest -> fold_left f (f acc x) rest
≡ Some (List.fold_left min (min 1 2) [3;4;5])
≡ Some (List.fold_left min 1 [3;4;5])
≡ Some (List.fold_left min (min 1 3) [4;5])
≡ Some (List.fold_left min 1 [4;5])
≡ Some (List.fold_left (min 1 4) [5])
≡ Some (List.fold_left min 1 [5])
≡ Some (List.fold_left (min 1 5) [])
≡ Some (List.fold_left min 1 [])
≡ Some 1
函数 List.fold_left
将 min 应用于列表的每个元素,每次将结果保存到累加器(在这种情况下从列表的第一个元素开始),当我们最终到达列表末尾返回累加器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。