Ocaml 折叠与过滤相结合
所以我正在为fold编写一个组合函数,它将执行过滤Ocaml 折叠与过滤相结合,ocaml,Ocaml,所以我正在为fold编写一个组合函数,它将执行过滤 let filter_combine (pred: 'a -> bool) : a' list -> 'a list -> 'a list = fun (x: 'a) (y: 'a list) -> x :: (filter pred y) 我没有任何编译问题,但我的两个测试用例中有一个失败了。我的实现有什么问题 这是失败的测试用例 [-1; 1] = fold (filter_combine (fun (x: int
let filter_combine (pred: 'a -> bool) : a' list -> 'a list -> 'a list =
fun (x: 'a) (y: 'a list) -> x :: (filter pred y)
我没有任何编译问题,但我的两个测试用例中有一个失败了。我的实现有什么问题
这是失败的测试用例
[-1; 1] = fold (filter_combine (fun (x: int) -> (abs x) mod 2 <> 0)) [] [-2; -1; 0; 1; 2]
我理解这个问题有点困难。我想你要说的是,你想写一个函数,它接受一个谓词,并返回一个适合与fold一起使用的函数,这样结果就会根据谓词过滤 问题的一些问题:
- 没有名为
的内置OCaml函数fold
- 如果要实现过滤,那么在实现中使用
似乎相当奇怪filter
如果我假设您使用的是
fold\u right
,那么在我看来,您可能希望返回类型为a->a list->a list
的函数。它想看一件事来决定做什么,而不是看一大堆事情。既然您说没有得到编译错误,这表明名为fold
的函数不能像我预期的那样工作。如果你展示一下折叠的实际工作原理,可能会有所帮助。我在理解这个问题时遇到了一些困难。我想你要说的是,你想写一个函数,它接受一个谓词,并返回一个适合与fold一起使用的函数,这样结果就会根据谓词过滤
问题的一些问题:
- 没有名为
的内置OCaml函数fold
- 如果要实现过滤,那么在实现中使用
似乎相当奇怪filter
如果我假设您使用的是
fold\u right
,那么在我看来,您可能希望返回类型为a->a list->a list
的函数。它想看一件事来决定做什么,而不是看一大堆事情。既然您说没有得到编译错误,这表明名为fold
的函数不能像我预期的那样工作。如果您演示了折叠的实际工作方式,可能会有所帮助。过滤器
类型错误,或者过滤器
不是列表。过滤器。您应该提供折叠的签名,并且过滤器
过滤器类型错误,或者filter
不是列表。filter
。您应该提供fold
和filter
的签名。
[-2; 2] = fold (filter_combine (fun (x: int) -> (abs x) > 1)) [] [-2; -1; 0; 1; 2]