【发布时间】:2018-09-25 15:24:35
【问题描述】:
在 OCaml 中,典型的折叠函数如下所示:
let rec fold (combine: 'a -> 'b -> 'b) (base: 'b) (l: 'a list) : 'b =
begin match l with
| [] -> base
| x :: xs -> combine x (fold combine base xs)
end
对于那些熟悉 OCaml(不像我)的人来说,它的作用应该很简单。
我正在编写一个函数,当列表中的所有项目都满足条件时返回 true:如果条件 x 对于某个列表 l 中的所有 x 为 true。但是我正在使用折叠功能实现该功能,但我被卡住了。具体来说,我不知道列表应该返回什么。我知道理想情况下应该将条件应用于列表中的每个项目,但我不知道语法应该是什么样子。 x && acc 有效,但它未能通过非常简单的测试(如下所示)
let test () : bool =
not (for_all (fun x -> x > 0) [1; 2; -5; -33; 2])
;; run_test "for_all: multiple elements; returns false" test
这是我的初步尝试。任何帮助表示赞赏:
let for_all (pred: 'a -> bool) (l: 'a list) : bool =
fold (fun(x:'a)(acc: bool)-> _?_&&_?_ )false l
【问题讨论】: